Do setUp and tearDown methods run for each method or at the beginning and at the end of TestCase
属于同一个测试用例的成员的测试方法是否相互影响?
在PythonUnitTest中,我试图理解,如果我在测试方法中更改了一个变量,那么其他测试方法中的变量是否会更改。还是为每个方法运行设置和拆卸方法,以便为每个方法重新设置变量?
我的意思是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | AsdfTestCase(unittest.TestCase): def setUp(self): self.dict = { 'str': 'asdf', 'int': 10 } def tearDown(self): del self.dict def test_asdf_1(self): self.dict['str'] = 'test string' def test_asdf_2(self): print(self.dict) |
因此,我询问将打印哪个输出测试'asdf'或'test_string'
是的,在测试用例类中的每个测试(即名称中以"test"开头的函数)之前都会运行安装和拆卸。考虑这个例子:
1 2 3 4 5 6 7 8 | # in file testmodule import unittest class AsdfTestCase(unittest.TestCase): def setUp(self) : print('setUp called') def tearDown(self) : print('tearDown called') def test_asdf_1(self): print( 'test1 called' ) def test_asdf_2(self): print( 'test2 called' ) |
从命令行调用它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ python3 -m unittest -v testmodule test_asdf_1 (testmodule.AsdfTestCase) ... setUp called test1 called tearDown called ok test_asdf_2 (testmodule.AsdfTestCase) ... setUp called test2 called tearDown called ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK |
(因此,是的,在您的示例中,由于重新执行安装程序,它将触发"asdf",覆盖由测试2引起的更改)
每个测试用例都是独立存在的。设置方法在每个测试用例之前运行,拆卸方法在每个测试用例之后运行。
所以为了回答您的问题,如果您在测试用例中更改一个变量,它将不会影响其他测试用例。
通过编写测试代码,您走上了正确的道路。当你自己动手的时候,这总是一种更好的学习体验。不过,这是你的答案。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import unittest class AsdfTest(unittest.TestCase): def setUp(self): print"Set Up" self.dict = { 'str': 'asdf', 'int': 10 } def tearDown(self): print"Tear Down" self.dict = {} def test_asdf_1(self): print"Test 1" self.dict['str'] = 'test string' print self.dict def test_asdf_2(self): print"Test 2" print self.dict if __name__ == '__main__': unittest.main() |
输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 | Set Up Test 1 {'str': 'test string'} Tear Down .Set Up Test 2 {} Tear Down . ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK |
您可以看到设置方法是在每次测试之前运行的。然后在每次测试后运行分解方法。