Python单元测试-使用setupclass和多个设置/删除?

Python单元测试-使用setupclass和多个设置/删除?,python,inheritance,python-unittest,class-method,Python,Inheritance,Python Unittest,Class Method,我知道setUpClass/tearDownClass方法对一个类调用一次,setUp/tearDown在每个单元测试之前/之后调用。有关此标准设置,请参见下面的代码段: class Example(unittest.TestCase): @classmethod def setUpClass(cls): do_expensive_setup_of_immutable_objects_used_by_all_tests() def setUp(self)

我知道setUpClass/tearDownClass方法对一个类调用一次,setUp/tearDown在每个单元测试之前/之后调用。有关此标准设置,请参见下面的代码段:

class Example(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        do_expensive_setup_of_immutable_objects_used_by_all_tests()

    def setUp(self):
        do_setup_before_each_test()

    def test1(self):
        do_test1_stuff()

    def test2(self):
        do_test1_stuff()

    def tearDown(self):
        do_teardown_after_each_test()

    @classmethod
    def tearDownClass(cls):
        do_teardown_of_immutable_objects_used_from_all_tests()

但是,我希望一些单元测试具有不同于其他单元测试的设置和拆卸。实现此功能的良好测试结构是什么?我有什么选择?我对Python缺乏经验,我想知道一种编写涉及昂贵安装过程的单元测试的好风格。

也许这就是@Klaus的意思

import unittest


class TestA(unittest.TestCase):
    def setUp(self):
        print "Setup # 1"

    def test1(self):
        print "Doing test1"

class TestB(unittest.TestCase):
    def setUp(self):
        print "Setup # 2"

    def test2(self):
        print "Doing test2"


if __name__ == "__main__":
    unittest.main()
或者,您可以根据方法名称更改设置。 虽然这可能是一个更痛苦的维持

class TestA(unittest.TestCase):
    def setUp(self):
        if self._testMethodName == "test1":
            print "Setup # 1"
        elif self._testMethodName == "test2":
            print "Setup # 2"

    def test1(self):
        print "Doing test1"

    def test2(self):
        print "Doing test2"


if __name__ == "__main__":
    unittest.main()
两者产生相同的输出:

Output:
Setup # 1
Doing test1
.Setup # 2
Doing test2
.
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK
编辑: 对不起,我不认为我完全理解,但这是我试图实现您的意见。 我在这里的方法是重新应用BaseTest.setUp,而不是像您描述的那样尝试保持它的完整性。 TypeOneTests和TypeTwoTests继承了BaseTest,并使用super

输出:

BaseTest setUp
TypeOneTests setUp
a test in TypeOneTests
TypeOneTests tearDown
.BaseTest setUp
TypeTwoTests additional setUp
a test in TypeTwoTests
TypeTwoTests tearDown
BaseTest tearDown
.
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK

也许这就是“克劳斯”的意思

import unittest


class TestA(unittest.TestCase):
    def setUp(self):
        print "Setup # 1"

    def test1(self):
        print "Doing test1"

class TestB(unittest.TestCase):
    def setUp(self):
        print "Setup # 2"

    def test2(self):
        print "Doing test2"


if __name__ == "__main__":
    unittest.main()
或者,您可以根据方法名称更改设置。 虽然这可能是一个更痛苦的维持

class TestA(unittest.TestCase):
    def setUp(self):
        if self._testMethodName == "test1":
            print "Setup # 1"
        elif self._testMethodName == "test2":
            print "Setup # 2"

    def test1(self):
        print "Doing test1"

    def test2(self):
        print "Doing test2"


if __name__ == "__main__":
    unittest.main()
两者产生相同的输出:

Output:
Setup # 1
Doing test1
.Setup # 2
Doing test2
.
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK
编辑: 对不起,我不认为我完全理解,但这是我试图实现您的意见。 我在这里的方法是重新应用BaseTest.setUp,而不是像您描述的那样尝试保持它的完整性。 TypeOneTests和TypeTwoTests继承了BaseTest,并使用super

输出:

BaseTest setUp
TypeOneTests setUp
a test in TypeOneTests
TypeOneTests tearDown
.BaseTest setUp
TypeTwoTests additional setUp
a test in TypeTwoTests
TypeTwoTests tearDown
BaseTest tearDown
.
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK

把它们放到另一个班上。你能不能更具体一点,比如说把什么放到另一个班上?把它们放到另一个班上。你能不能更具体一点,比如说把什么放到另一个班上?谢谢你的反馈。让我再解释一遍。我想有一些更像:BaseTest设置| TypeOneTests设置构建BaseTest设置|设置一型单元测试|运行单元测试|拆除一型单元测试| TypeOneTests拆除,保持BaseTest设置完整| TypeTwoTests附加设置|设置二型单元测试|运行单元测试测试|二型单元测试的拆卸| BaseTest拆卸|我如何实现这一点?再次感谢您的帮助。@bwribit我已经编辑了我的帖子,试图实现您的评论。非常感谢,您的编辑完成了我想要做的事情!:谢谢你的反馈。让我再解释一遍。我想有一些更像:BaseTest设置| TypeOneTests设置构建BaseTest设置|设置一型单元测试|运行单元测试|拆除一型单元测试| TypeOneTests拆除,保持BaseTest设置完整| TypeTwoTests附加设置|设置二型单元测试|运行单元测试测试|二型单元测试的拆卸| BaseTest拆卸|我如何实现这一点?再次感谢您的帮助。@bwribit我已经编辑了我的帖子,试图实现您的评论。非常感谢,您的编辑完成了我想要做的事情!: