我有一个Pylons 1.0应用程序,在测试/功能目录中有一堆测试.我得到了奇怪的测试结果,我想只运行一次测试.鼻子文档说我应该能够在命令行传递测试名称,但无论我做什么,我都会得到ImportErrors
例如:
nosetests -x -s sometestname
Run Code Online (Sandbox Code Playgroud)
得到:
Traceback (most recent call last):
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/loader.py", line 371, in loadTestsFromName
module = resolve_name(addr.module)
File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/util.py", line 334, in resolve_name
module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname
Run Code Online (Sandbox Code Playgroud)
我得到了同样的错误
nosetests -x -s appname.tests.functional.testcontroller
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?
当我输入
$ nosetests -v mytest.py
Run Code Online (Sandbox Code Playgroud)
所有测试通过后,我的所有打印输出都被捕获.我想看看打印输出甚至一切都过去了.
所以我正在做的是强制断言错误来查看输出,就像这样.
class MyTest(TestCase):
def setUp(self):
self.debug = False
def test_0(self):
a = .... # construct an instance of something
# ... some tests statements
print a.dump()
if self.debug:
eq_(0,1)
Run Code Online (Sandbox Code Playgroud)
感觉如此hackish,必须有一个更好的方式.请赐教.
我正在为下一个函数编写测试:
def foo():
print 'hello world!'
Run Code Online (Sandbox Code Playgroud)
所以,当我想测试这个函数时,代码将是这样的:
import sys
from foomodule import foo
def test_foo():
foo()
output = sys.stdout.getline().strip() # because stdout is an StringIO instance
assert output == 'hello world!'
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用-s参数运行nosetests,测试会崩溃.如何通过unittest或nose模块捕获输出?
我有一个名为test_web.py的文件,其中包含一个TestWeb类和许多名为test_something()的方法.
我可以像这样在类中运行每个测试:
$ nosetests test_web.py
...
======================================================================
FAIL: checkout test
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/me/path/here/test_web.py", line 187, in test_checkout
...
Run Code Online (Sandbox Code Playgroud)
但我似乎无法进行个别测试.在同一个PWD中运行时,这些给我"没有这样的测试"错误:
$ nosetests test_web.py:test_checkout
$ nosetests TestWeb:test_checkout
Run Code Online (Sandbox Code Playgroud)
这可能有什么问题?
我正在使用nosetests运行一套测试(.py文件).使用经典
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
测试运行从未完成.它只是挂在断点已设置的位置,但从不插入pdb调试器.
任何想法为什么会这样?我已经尝试将断点移动到许多不同的位置(其他测试功能,其他文件)无济于事.
我搜索了文档,但找不到任何文档.有几个没有解释太多.
有人可以向我解释鼻子吗?
assert_raises(what should I put here?)
Run Code Online (Sandbox Code Playgroud)
功能以及如何使用它?
对Python使用nosetests时,可以通过将test function的__test__
属性设置为false 来禁用单元测试.我使用以下装饰器实现了这个:
def unit_test_disabled():
def wrapper(func):
func.__test__ = False
return func
return wrapper
@unit_test_disabled
def test_my_sample_test()
#code here ...
Run Code Online (Sandbox Code Playgroud)
但是,这会产生调用包装器作为单元测试的副作用.包装将始终通过,但它包含在nosetests输出中.是否有另一种构造装饰器的方法,以便测试不会运行并且不会出现在nosetests输出中.
我无法在virtualenv项目中使用nose(nosetests) - 它似乎无法找到virtualenv环境中安装的软件包.
奇怪的是我可以设置
test_suite = 'nose.collector'
Run Code Online (Sandbox Code Playgroud)
在setup.py中运行测试就好了
python setup.py test
Run Code Online (Sandbox Code Playgroud)
但是当直接运行nosetests时,会出现各种导入错误.
我尝试了系统范围的鼻子安装和virtualenv鼻子包,没有运气.
有什么想法吗?
谢谢!!
我nosetests
用来运行我的单元测试,效果很好.我想获得所有测试的列表nostests
而不实际运行它们.有没有办法做到这一点?
使用Django的普通测试运行器,您可以深入研究在特定应用程序,TestCase的特定子类或TestCase的特定子类中的特定测试中运行测试.
例如:
./manage.py test myapp.MyTestCase.test_something
Run Code Online (Sandbox Code Playgroud)
但是,除了测试特定应用程序之外,django-nose似乎不支持任何其他内容.我如何复制最后两个行为?
nosetests ×10
python ×8
nose ×3
unit-testing ×3
testing ×2
django ×1
django-nose ×1
pdb ×1
pylons ×1
python-nose ×1
testcase ×1
virtualenv ×1