python 单元测试中使用参数化测试技巧(parameterisation)

这篇文章介绍了在 python 的单元测试中如何使用参数化测试(parameterisation) 技巧来做到将测试数据和测试逻辑分离。Improve Python testing with parameterisation

的确,我们在应用程序中对于业务逻辑和数据的分离会做很好的考虑,但是在自动化测试,在单元测试中有时候会忽略这一点,我发现我也有这个问题,所以写出来的单元测试类似这样:

# test_prime.py
import unittest

from prime import is_prime


class TestIsPrime(unittest.TestCase):

    def test_x_negative(self):
        self.assertEqual(is_prime(-1), False)

    def test_x_zero(self):
        self.assertEqual(is_prime(0), False)

    def test_x_one(self):
        self.assertEqual(is_prime(1), False)

    def test_x_two(self):
        self.assertEqual(is_prime(2), True)

    def test_x_three(self):
        self.assertEqual(is_prime(3), True)

    def test_x_ten(self):
        self.assertEqual(is_prime(10), False)

    def test_x_fifty_three(self):
        self.assertEqual(is_prime(53), True)


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

而这篇文章中建议我们应该这样:

import unittest

from prime import is_prime


class TestIsPrime(unittest.TestCase):

    def test_is_prime(self):
        test_cases = [
            (-1, False),
            (0, False),
            (1, False),
            (2, True),
            (3, True),
            (10, True),
            (53, True),
        ]
        for x, output in test_cases:
            with self.subTest(name=str(x)):
                self.assertEqual(is_prime(x), output)


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

好处不言而喻。

发表评论

电子邮件地址不会被公开。 必填项已用*标注