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

问题描述

据我所知,在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方法。通常应该避免这种复杂且耗时的设置,除非集成或端到端测试预计会很慢并且应将其保持在最低水平。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...