089. 编写一个函数,实现简单的单元测试框架

编写一个简单的单元测试框架可以帮助你理解单元测试的基本原理。虽然 Python 已经提供了内置的 unittest 框架,但自己实现一个简单的框架可以加深对测试机制的理解。 以下是一个简单的单元测试框架的实现,支持基本的测试用例定义和执行。

示例代码

以下代码实现了一个简单的单元测试框架,支持基本的测试用例定义和执行。

class SimpleTestCase:
    def __init__(self, name, test_func):
        self.name = name
        self.test_func = test_func

    def run(self):
        try:
            self.test_func()
            print(f"测试通过: {self.name}")
        except AssertionError as e:
            print(f"测试失败: {self.name} - {e}")
        except Exception as e:
            print(f"测试错误: {self.name} - {e}")

class SimpleTestSuite:
    def __init__(self):
        self.test_cases = []

    def add_test(self, test_case):
        self.test_cases.append(test_case)

    def run(self):
        for test_case in self.test_cases:
            test_case.run()

# 示例用法
def test_addition():
    assert 1 + 1 == 2, "1 + 1 应该等于 2"

def test_subtraction():
    assert 2 - 1 == 1, "2 - 1 应该等于 1"

def test_failure():
    assert 1 == 2, "这个测试应该失败"

if __name__ == "__main__":
    suite = SimpleTestSuite()
    suite.add_test(SimpleTestCase("测试加法", test_addition))
    suite.add_test(SimpleTestCase("测试减法", test_subtraction))
    suite.add_test(SimpleTestCase("测试失败", test_failure))
    suite.run()

代码说明

测试用例类 SimpleTestCase

  • 每个测试用例是一个 SimpleTestCase 实例,包含测试名称和测试函数。

  • run 方法执行测试函数,并捕获 AssertionError 和其他异常,打印测试结果。

测试套件类 SimpleTestSuite

  • 测试套件是一个容器,用于管理多个测试用例。

  • add_test 方法添加测试用例到套件中。

  • run 方法依次执行所有测试用例。

定义测试函数:使用 assert 语句编写测试逻辑。如果断言失败,会抛出 AssertionError

运行测试:创建一个测试套件,添加测试用例,然后调用 run 方法执行所有测试。

示例输出

假设运行上述代码,输出可能如下:

测试通过: 测试加法
测试通过: 测试减法
测试失败: 测试失败 - 这个测试应该失败

注意事项

  1. 测试用例的独立性:每个测试用例应该是独立的,不依赖于其他测试用例的结果。
  2. 测试覆盖率:尽量编写覆盖各种情况的测试用例,包括正常情况和异常情况。
  3. 异常处理:在实际应用中,可以扩展异常处理机制,记录详细的错误信息。

扩展功能

如果你需要更复杂的单元测试框架功能,可以考虑以下内容:

  1. 支持测试类:允许将测试方法组织到类中,类似于 unittest.TestCase
  2. 支持测试前置和后置操作:提供 setUptearDown 方法,用于测试前的准备和测试后的清理。
  3. 支持测试跳过:提供机制跳过某些测试用例。
  4. 支持测试结果统计:统计测试通过、失败和错误的数量。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)