如何在Python中通过参数化实现动态单元测试?

Linda Hamilton
发布: 2024-11-23 20:52:13
原创
805 人浏览过

How Can I Implement Dynamic Unit Testing with Parameterization in Python?

参数化的 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板