第11章 · 测试代码

使用unittest编写单元测试,测试函数和类,为代码建立自动化回归保障。

知识点 代码示例 章节测验(2 题)

知识点讲解

单元测试与断言

使用unittest模块编写测试。测试用例继承 unittest.TestCase,方法以 test_ 开头,用断言方法验证结果,例如 assertEqual(a, b)assertNotEqual()assertTrue()assertIn() 等。运行 python -m unittest 即可执行所有测试。

测试类与setUp

测试类与测试函数类似,但需要先创建被测类的实例。在测试类中定义 setUp() 方法,会在每个测试方法运行前自动执行,可在其中创建公共的测试对象,避免在每个测试方法中重复初始化。

代码示例

测试函数

演示unittest测试函数。

import unittest
from name_function import get_formatted_name

class NameTestCase(unittest.TestCase):
    def test_first_last_name(self):
        formatted = get_formatted_name("janis", "joplin")
        self.assertEqual(formatted, "Janis Joplin")

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

测试类与setUp

演示测试类与setUp方法。

import unittest
from survey import AnonymousSurvey

class TestSurvey(unittest.TestCase):
    def setUp(self):
        self.question = "你最喜欢什么语言?"
        self.my_survey = AnonymousSurvey(self.question)

    def test_single_response(self):
        self.my_survey.store_response("python")
        self.assertIn("python", self.my_survey.responses)

    def test_three_responses(self):
        for r in ["python", "c", "rust"]:
            self.my_survey.store_response(r)
        for r in ["python", "c", "rust"]:
            self.assertIn(r, self.my_survey.responses)

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