您可以只使用下划线开头的类、方法或函数名称,nose 会忽略它。
@nottest
有它的用途,但我发现当类相互派生并且鼻子必须忽略某些基类时它不能很好地工作。当我有一系列类似的 Django 视图要测试时,这种情况经常发生。他们经常共享需要测试的特征。例如,只有具有特定权限的用户才能访问它们。我没有为所有这些编写相同的权限检查,而是将这样的共享测试放在其他类派生的初始类中。但问题是基类只能由后面的类派生出来,而不是要独立运行。这是问题的一个例子:
from unittest import TestCase
class Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
流鼻涕的输出:
$ nosetests test.py -s
Testing something in Base
.Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
该类Base
包含在测试中。
我不能只是打耳光@nottest
,Base
因为它会标记整个层次结构。事实上,如果你只是@nottest
在上面的代码前面添加class Base
,nose 将不会运行任何测试。
我所做的是在基类前面添加一个下划线:
from unittest import TestCase
class _Base(TestCase):
def test_something(self):
print "Testing something in " + self.__class__.__name__
class Derived(_Base):
def test_something_else(self):
print "Testing something else in " + self.__class__.__name__
并且在运行时会_Base
被忽略:
$ nosetests test3.py -s
Testing something in Derived
.Testing something else in Derived
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
这种行为没有得到很好的记录,但是选择测试的代码明确地检查类名开头的下划线。
鼻子对函数和方法名称执行类似的测试,因此可以通过在名称开头添加下划线来排除它们。