Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python unittest-使setUp()成为测试数据的唯一真实来源及其对并行测试的影响_Python_Unit Testing_Tdd_Python Unittest_Parallel Testing - Fatal编程技术网

Python unittest-使setUp()成为测试数据的唯一真实来源及其对并行测试的影响

Python unittest-使setUp()成为测试数据的唯一真实来源及其对并行测试的影响,python,unit-testing,tdd,python-unittest,parallel-testing,Python,Unit Testing,Tdd,Python Unittest,Parallel Testing,据我所知,在Python中使用unittest是这样做的- #test.py 导入单元测试 输入数学 从我的数学导入做数学 类测试(unittest.TestCase): def测试第一种情况(自身): self.assertEqual(math.sqrt(4),do_math.sqroot(4)) self.assertEqual(math.sqrt(9),do_math.sqroot(9)) 如果名称=“\uuuuu main\uuuuuuuu”: unittest.main() 我特别关

据我所知,在Python中使用
unittest
是这样做的-

#test.py
导入单元测试
输入数学
从我的数学导入做数学
类测试(unittest.TestCase):
def测试第一种情况(自身):
self.assertEqual(math.sqrt(4),do_math.sqroot(4))
self.assertEqual(math.sqrt(9),do_math.sqroot(9))
如果名称=“\uuuuu main\uuuuuuuu”:
unittest.main()
我特别关心的是验证测试结果所需的计算。如果我们使用
setUp()
方法,我们可以如下重新构造代码

#test.py
导入单元测试
输入数学
从我的数学导入做数学
类测试(unittest.TestCase):
def设置(自):
自检_1=4
自检_2=9
self.test\u sqroot\u 1=math.sqrt(self.test\u 1)
self.test_sqroot_2=math.sqrt(self.test_2)
def测试第一种情况(自身):
self.assertEqual(self.test\u sqroot\u 1,do\u math.sqroot(self.test\u 1))
self.assertEqual(self.test\u sqroot\u 2,do\u math.sqroot(self.test\u 2))
如果名称=“\uuuuu main\uuuuuuuu”:
unittest.main()
如果我需要根据真值或目标值重构测试用例,我只需要更改setUp()函数体,而在第一种方法中,我需要在任何地方进行更改(考虑到多个测试用例访问相同的数据)


我的问题是——就并行测试而言,考虑到我在
setUp()
函数中执行验证所需的大部分计算,而不是在testcase函数本身,第二种方法是否可取?

为什么需要多次计算4和9的平方根?为什么不预先计算一下呢,尤其是在这种琐碎的情况下

self.test_1 = 4
self.test_2 = 9
self.test_sqroot_1 = 2
self.test_sqroot_2 = 3
编辑(根据评论):

即使计算更复杂,我也不会这样做。测试的设置应尽可能简单和快速。如果每次测试的计算结果都相同,那么为什么要这样做呢。计算一次并设置为常量值


另一方面,如果计算有测试所需的副作用,例如,它实际上正在建立数据库或类似的,则称之为设置,而不是计算。在这种情况下,它实际上属于setup方法。除了集成或端到端测试外,通常应避免此类复杂且耗时的设置,因为集成或端到端测试预计速度较慢,且应保持在最低限度。

这是一个微不足道的计算,因此它被用作需要运行的测试类型的示例。实际实现可能会使用更昂贵的函数调用。