Unittest setUp/tearDown for several tests
是否有在测试方案的开始/结束时激发的函数?每次测试之前/之后都会触发函数设置和拆卸。
我通常想要这个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class TestSequenceFunctions(unittest.TestCase): def setUpScenario(self): start() #launched at the beginning, once def test_choice(self): element = random.choice(self.seq) self.assertTrue(element in self.seq) def test_sample(self): with self.assertRaises(ValueError): random.sample(self.seq, 20) for element in random.sample(self.seq, 5): self.assertTrue(element in self.seq) def tearDownScenario(self): end() #launched at the end, once |
现在,这些设置和拆卸是单元测试,并且分布在我的所有场景中(包含许多测试),一个是第一个测试,另一个是最后一个测试。
从2.7开始(根据文档),您将得到分别在运行给定类中的测试之前和之后执行的
否则,您最好的选择可能是创建自己的派生测试套件并重写
我有相同的场景,对于我来说,SetupClass和TearDowNClass方法工作得很好
1 2 3 4 5 6 7 8 9 10 | import unittest class Test(unittest.TestCase): @classmethod def setUpClass(cls): cls._connection = createExpensiveConnectionObject() @classmethod def tearDownClass(cls): cls._connection.destroy() |
对于python 2.5,当使用pydev时,这有点困难。Pydev似乎不使用测试套件,而是查找所有单独的测试用例并分别运行它们。
我的解决方案是使用这样的类变量:
1 2 3 4 5 6 7 8 9 10 11 12 | class TestCase(unittest.TestCase): runCount = 0 def setUpClass(self): pass # overridden in actual testcases def run(self, result=None): if type(self).runCount == 0: self.setUpClass() super(TestCase, self).run(result) type(self).runCount += 1 |
有了这个诀窍,当你从这个
这意味着
我还没有一个