我有一些依赖于同一变量foo
from unittest import TestCase
# actually FOO is imported because it is quite big
FOO = {'key_a': 'aaa', 'key_b': 'bbb'}
class TestFoo(TestCase):
def setUp(self):
self.foo = FOO
def test_a(self):
self.foo['key_a'] = 'ccc'
self.assertEqual(self.foo['key_a'], 'ccc')
def test_b(self):
self.assertEqual(self.foo['key_a'], 'aaa')
我遇到的问题是,一旦我将test_a
中的值更改为
self.foo['key_a'] = 'ccc'
对于所有后续测试,值“保持”这种方式。 test_b
中的断言失败,因为self.foo['key_a']
的值仍为'ccc'
如何在所有测试中编写测试用例self.foo
为{'key_a': 'aaa', 'key_b': 'bbb'}
?
答案 0 :(得分:2)
当您在setUp
方法中设置self.foo
时,您没有复制字典,只是将其分配给self.foo['a']
。当您设置FOO
时,这会改变原始字典setUp
,因此会影响其他测试。
您可以通过在class TestFoo(TestCase):
def setUp(self):
self.foo = FOO.copy()
方法中复制字典来避免此问题。
import copy
class TestFoo(TestCase):
def setUp(self):
self.foo = copy.deepcopy(FOO)
如果字典包含其他可变值,则可能必须使用share the state
ManyToOne