Python 2.7 为什么我的鼻子测试在使用继承时会以A、AB、ABC的方式重复测试
所以我的鼻子测试项目有问题,所以我隔离了这个问题并试图解决它,但我留下了一些奇怪的行为。请参阅下面的脚本以供参考Python 2.7 为什么我的鼻子测试在使用继承时会以A、AB、ABC的方式重复测试,python-2.7,unit-testing,inheritance,nose,Python 2.7,Unit Testing,Inheritance,Nose,所以我的鼻子测试项目有问题,所以我隔离了这个问题并试图解决它,但我留下了一些奇怪的行为。请参阅下面的脚本以供参考 from unittest import TestCase class BaseClass(TestCase): @classmethod def setup_class(cls): print("defining base class stuff") def assert_something(self, expected, actual
from unittest import TestCase
class BaseClass(TestCase):
@classmethod
def setup_class(cls):
print("defining base class stuff")
def assert_something(self, expected, actual):
assert expected == actual, "failed test"
class FirstClass(BaseClass):
@classmethod
def setup_class(cls):
super(FirstClass, cls).setup_class()
print("defining first class stuff")
def test_first_class(self):
self.assert_something(1, 1)
class SecondClass(FirstClass):
@classmethod
def setup_class(cls):
super(SecondClass, cls).setup_class()
print("defining second class stuff")
def test_second_class(self):
self.assert_something(5, 4)
class ThirdClass(SecondClass):
@classmethod
def setup_class(cls):
SecondClass.setup_class()
print("defining third class stuff")
def test_third_class(self):
self.assert_something(13, 13)
现在,如果我运行上面的脚本。我在终端中获得以下输出:
(sandbox_venv) michael@Puter:~/workspace/sandbox$ nosetests -v
test_first_class (test_.FirstClass) ... ok
test_first_class (test_.SecondClass) ... ok
test_second_class (test_.SecondClass) ... FAIL
test_first_class (test_.TestThirdClass) ... ok
test_second_class (test_.TestThirdClass) ... FAIL
test_third_class (test_.TestThirdClass) ... ok
因为我继承的方式。很明显,它们也继承了测试用例并再次运行它们。这就是我在标题中所说的“A,AB,ABC”的意思
这不是期望的功能。我试图创建这个项目,这样我就可以按照特定的顺序运行我的测试,但我也可以使每个测试彼此独立。这样,如果我只运行第三个类测试,那么它将从每个后续类运行setup_class(),但不会运行测试。@Ulrich Eckhardt感谢您的评论。此后,我进一步研究了这一点,发现使用继承无法获得所需的功能 相反,我删除了继承,而只是从每个类setup方法中调用基类中的setup\u class方法。像这样:
from unittest import TestCase
class BaseClass(TestCase):
@classmethod
def setup_class(cls):
print("defining base class stuff")
@classmethod
def assert_something(cls, expected, actual):
assert expected == actual, "failed test"
class FirstClass():
@classmethod
def setup_class(cls):
BaseClass.setup_class()
print("defining first class stuff")
def test_first_class(self):
BaseClass.assert_something(1, 1)
class SecondClass():
@classmethod
def setup_class(cls):
BaseClass.setup_class()
print("defining second class stuff")
def test_second_class(self):
BaseClass.assert_something(5, 4)
class ThirdClass():
@classmethod
def setup_class(cls):
BaseClass.setup_class()
print("defining third class stuff")
def test_third_class(self):
BaseClass.assert_something(13, 13)
我可以命名为'ThirdClass'~'TestThirdClass',但我仍然无法在隔离中运行测试。测试用例是成员函数,因此它们是继承的。使用继承时的任何其他行为都是错误的。也许你不应该使用继承?