参数化的 Python 动态单元测试
简介
参数化是单元中的一种技术使用不同的输入数据集自动创建测试的测试。这使得开发人员可以在各种场景下彻底测试他们的代码,确保其健壮性和可靠性。
使用 pytest 的装饰器进行参数化
参数化的一个流行选项是使用 pytest 的装饰器。只需将 @parametrize 装饰器添加到您的测试类中,然后添加如下值列表:
from pytest import mark class TestSequence(unittest.TestCase): @mark.parametrize( ["name", "a", "b"], [ ["foo", "a", "a"], ["bar", "a", "b"], ["lee", "b", "b"], ] ) def test_sequence(self, name, a, b): self.assertEqual(a, b)
此装饰器将为列表中的每组值自动生成单独的测试。
使用参数化库进行参数化
另一种选择是使用参数化库。使用此库进行相同测试的效果如下:
from parameterized import parameterized class TestSequence(unittest.TestCase): @parameterized.expand([ ["foo", "a", "a"], ["bar", "a", "b"], ["lee", "b", "b"], ]) def test_sequence(self, name, a, b): self.assertEqual(a, b)
在这两种情况下,结果是相同的:根据提供的数据生成多个测试,使您可以彻底测试代码。
参数化的原始方法
虽然上述方法是现代且广泛使用的,但有动态生成测试方法的旧方法。然而,这种方法不再常用,仅出于历史原因而被提及:
import unittest l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", "b"]] class TestSequense(unittest.TestCase): pass def test_generator(a, b): def test(self): self.assertEqual(a,b) return test if __name__ == '__main__': for t in l: test_name = 'test_%s' % t[0] test = test_generator(t[1], t[2]) setattr(TestSequense, test_name, test) unittest.main()
以上是如何在Python中通过参数化实现动态单元测试?的详细内容。更多信息请关注PHP中文网其他相关文章!