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
方法执行所有测试。
示例输出
假设运行上述代码,输出可能如下:
测试通过: 测试加法
测试通过: 测试减法
测试失败: 测试失败 - 这个测试应该失败
注意事项
- 测试用例的独立性:每个测试用例应该是独立的,不依赖于其他测试用例的结果。
- 测试覆盖率:尽量编写覆盖各种情况的测试用例,包括正常情况和异常情况。
- 异常处理:在实际应用中,可以扩展异常处理机制,记录详细的错误信息。
扩展功能
如果你需要更复杂的单元测试框架功能,可以考虑以下内容:
- 支持测试类:允许将测试方法组织到类中,类似于
unittest.TestCase
。 - 支持测试前置和后置操作:提供
setUp
和tearDown
方法,用于测试前的准备和测试后的清理。 - 支持测试跳过:提供机制跳过某些测试用例。
- 支持测试结果统计:统计测试通过、失败和错误的数量。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)