在python unittest中,我尝试了解如果我在测试方法中更改了变量,那么该变量在其他测试方法中也会更改吗?还是为每个方法运行setUp和tearDown方法,然后为每个方法再次设置变量?
我的意思是
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)
所以我要问哪个输出 test_asdf_2() 'asdf'或'test_string'
答案 0 :(得分:2)
每个测试用例都是独立存在的。设置方法在每个测试用例之前运行,而拆解在每个测试用例之后运行。
所以要回答您的问题,如果您在测试用例中更改了变量,则不会影响其他测试用例。
编写测试代码可以使您走上正确的道路。当您自己做时,总是一种更好的学习体验。但是,这是您的答案。
示例代码:
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()
输出:
Set Up
Test 1
{'str': 'test string'}
Tear Down
.Set Up
Test 2
{}
Tear Down
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
您可以看到设置方法是在每次测试之前运行的。然后在每次测试后运行拆卸方法。
答案 1 :(得分:2)
是的,setUp和tearDown在测试用例类中的每次测试(即名称中以“ test”开头的函数)之前运行。考虑以下示例:
# 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' )
从命令行调用它:
$ 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
(因此,是的,在您的示例中,由于将重新执行setUp并覆盖由测试2引起的更改,因此它将弹出'asdf')