问题描述
据我所知,在Python中使用unittest
就是这样-
# test.py
import unittest
import math
from my_math import do_math
class test_do(unittest.TestCase):
def test_first_case(self):
self.assertEqual(math.sqrt(4),do_math.sqroot(4))
self.assertEqual(math.sqrt(9),do_math.sqroot(9))
if __name__ == "__main__":
unittest.main()
我特别关心的是我们需要执行的计算以验证测试结果。如果我们使用setUp()
方法,则可以按以下方式重新组织代码
# test.py
import unittest
import math
from my_math import do_math
class test_do(unittest.TestCase):
def setUp(self):
self.test_1 = 4
self.test_2 = 9
self.test_sqroot_1 = math.sqrt(self.test_1)
self.test_sqroot_2 = math.sqrt(self.test_2)
def test_first_case(self):
self.assertEqual(self.test_sqroot_1,do_math.sqroot(self.test_1))
self.assertEqual(self.test_sqroot_2,do_math.sqroot(self.test_2))
if __name__ == "__main__":
unittest.main()
如果我需要根据真实值或目标值重构测试用例,则只需要更改setUp()函数主体,而在第一种方法中我需要在所有地方进行更改(考虑多个测试用例访问同一测试用例)数据)。
我的问题是-就并行测试而言,鉴于我正在setUp()
函数中而不是在测试用例函数中进行验证所需的大部分计算,第二种方法是否值得建议? >
解决方法
为什么需要多次计算4和9的平方根?为什么不对其进行预先计算,尤其是在这种琐碎的情况下?
self.test_1 = 4
self.test_2 = 9
self.test_sqroot_1 = 2
self.test_sqroot_2 = 3
编辑(基于评论):
即使计算涉及更多,我也绝不会这样。测试的设置应尽可能简单快捷。如果每次测试得出的结果都相同,那为什么还要这样做。计算一次并设置为常数。
另一方面,如果计算具有测试所需的副作用,例如它实际上是在建立数据库或类似数据库,然后将其称为设置而不是计算。实际上,在这种情况下,它确实属于setup方法。通常应该避免这种复杂且耗时的设置,除非集成或端到端测试预计会很慢并且应将其保持在最低水平。