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',但我仍然无法在隔离中运行测试。测试用例是成员函数,因此它们是继承的。使用继承时的任何其他行为都是错误的。也许你不应该使用继承?