欢迎访问宙启技术站
智能推送

通过parameterized.parameterized模块实现参数化测试的Python示例

发布时间:2023-12-16 05:07:29

parameterized.parameterized是Python中的一个测试框架,可以用于执行参数化测试。它能够通过定义参数化的测试用例,自动化地生成多个不同输入的测试实例,并执行它们来验证代码的正确性。

下面是一个示例,展示了如何使用parameterized.parameterized模块进行参数化测试:

import unittest
from parameterized import parameterized

def sum_numbers(a, b):
    return a + b

class TestSumNumbers(unittest.TestCase):

    @parameterized.expand([
        (1, 2, 3),
        (0, 0, 0),
        (-1, 1, 0),
        (10, -5, 5)
    ])
    def test_sum_numbers(self, input1, input2, expected):
        result = sum_numbers(input1, input2)
        self.assertEqual(result, expected)

if __name__ == '__main__':
    unittest.main()

在上面的示例中,首先我们定义了一个sum_numbers函数,它接受两个参数a和b,并返回它们的和。

然后,我们创建了一个名为TestSumNumbers的测试类,继承自unittest.TestCase。

在该测试类中,我们定义了一个名为test_sum_numbers的测试方法,并使用@parameterized.expand装饰器将该方法标记为参数化测试。

@parameterized.expand装饰器接受一个列表作为参数,每个列表元素都表示一个测试实例,由输入参数和期望输出组成。在上面的示例中,我们定义了四个测试实例,分别是(1, 2, 3)、(0, 0, 0)、(-1, 1, 0)和(10, -5, 5)。

测试方法中的参数个数需要与测试实例中定义的参数个数相同。参数的顺序与定义的顺序一致。

在测试方法中,我们使用参数化的输入参数创建了一个result变量,并调用sum_numbers函数计算两个参数的和。

最后,我们使用self.assertEqual断言方法来验证实际输出与期望输出是否一致。

运行该示例,测试框架会自动化地生成四个测试实例,分别传入不同的输入参数并执行测试。输出结果会显示每个测试实例的运行结果,以及是否通过了断言。

通过parameterized.parameterized模块实现参数化测试的优点在于,它可以大大简化测试代码的编写和维护工作。当需要测试多组不同的输入时,仅需定义一次测试用例,然后使用不同的参数进行展开,测试框架会自动执行多次测试。这样可以提高测试效率,并且能够更全面地验证代码的正确性。