[英]Django Unit Tests - Changes to self properties are persisting from test to test
我有一个测试 class 具有这样的设置。 我们从包含一些默认数据的 test_helpers 文件中导入字典。 数据从一开始就设置为FORM_DATA['value_A'] = 0
和FORM_DATA['value_B'] = 1000000
。
我是否将 FORM_DATA 设置为 self.form_data 值,或者将其分配给每个测试中的变量,都无关紧要。 第二次测试似乎保留了第一次测试的字典更改,这对于测试来说并不理想。
我添加了一堆打印调试语句来显示正在发生的事情。 即使在第二次测试的 setUp() 中,它也会显示上一次测试的值? 这里发生了什么。 为什么字典 self?form_data 不能成为每次新测试时默认导入的数据?
from test_helpers import FORM_DATA
class TestBaselineScenarios(TestCase):
@classmethod
def setUpClass(cls):
super(TestBaselineScenarios, cls).setUpClass()
long_running_data_setup()
def setUp(self):
self.form_data = FORM_DATA
print("setUp", self.form_data['value_A'], self.form_data['value_B'])
def test_one(self):
print("1")
print(self.form_data['value_A'], self.form_data['value_B'])
self.form_data['value_A'] = 25000
self.form_data['value_B'] = 700000
print("2")
print(self.form_data['value_A'], self.form_data['value_B'])
simulation = test_helpers.create_simulation(form_data=self.form_data)
simulation.run()
self.assertEqual(0.8416667, round(simulation.success_rate(), 7))
def test_two(self):
print("3")
print(self.form_data['value_A'], self.form_data['value_B'])
self.form_data['value_A'] = 10000
print("4")
print(self.form_data['value_A'], self.form_data['value_B'])
simulation = test_helpers.create_simulation(form_data=self.form_data)
simulation.run()
self.assertEqual(0.9916667, round(simulation.success_rate(), 7))
setUp 0 1000000
1
0 1000000
2
25000 700000
setUp 25000 700000
3
25000 700000
4
10000 700000
当您运行此代码时:
self.form_data = FORM_DATA
您实际上并没有复制FORM_DATA
的内容,只是存储了对它的引用。 因此,当您运行self.form_data['value_A'] = 25000
时,您也在更改FORM_DATA
。
下次运行setUp
时,它只是将修改后的FORM_DATA
的相同引用分配回self.form_data
。
尝试做一份FORM_DATA
的副本。
Python 有几种方法可以创建事物的副本。 假设FORM_DATA
是一个字典,最简单的是调用dict.copy
。 如果它更复杂,您还可以使用内置的copy
库来创建浅拷贝。
将您的设置 function 更改为:
def setUp(self):
self.form_data = FORM_DATA.copy()
print("setUp", self.form_data['value_A'], self.form_data['value_B'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.