Python单元测试-使用setupclass和多个设置/删除?
我知道setUpClass/tearDownClass方法对一个类调用一次,setUp/tearDown在每个单元测试之前/之后调用。有关此标准设置,请参见下面的代码段: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)
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我已经编辑了我的帖子,试图实现您的评论。非常感谢,您的编辑完成了我想要做的事情!: