Python单元测试unittest入门与最佳实践:从assert到Mock
unittest基础概念
unittest是Python内置的单元测试框架,灵感来源于JUnit。核心概念包括:
- Test Case(测试用例):最小的测试单元,继承自
unittest.TestCase - Test Suite(测试套件):多个测试用例的集合
- Test Runner(测试运行器):执行测试并输出结果
- Fixture(测试夹具):测试前的准备和测试后的清理工作
二、编写第一个测试
创建一个简单的计算器类及其测试:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
对应的测试代码:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
三、常用断言方法
unittest.TestCase提供了丰富的断言方法:
| 方法 | 用途 |
|---|---|
| assertEqual(a, b) | 验证a == b |
| assertNotEqual(a, b) | 验证a != b |
| assertTrue(x) | 验证x为True |
| assertFalse(x) | 验证x为False |
| assertIs(a, b) | 验证a is b |
| assertIsNone(x) | 验证x is None |
| assertIn(a, b) | 验证a in b |
| assertIsInstance(a, b) | 验证isinstance(a, b) |
| assertRaises(exc) | 验证抛出异常 |
| assertAlmostEqual(a, b) | 验证浮点数近似相等 |
四、高级特性
1. 跳过测试与预期失败
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
2. 使用Mock对象
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
五、测试组织与发现
对于大型项目,合理的测试组织至关重要:
|
1 2 3 4 5 6 7 8 |
|
运行测试的多种方式:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
六、最佳实践总结
- 测试命名:使用
test_前缀,描述清楚测试意图 - 独立性:每个测试应独立运行,不依赖其他测试
- 单一职责:一个测试只验证一个概念
- 使用setUp/tearDown:合理管理测试资源
- Mock外部依赖:单元测试应隔离外部系统
- 覆盖率目标:核心代码建议达到80%以上覆盖率
使用coverage工具检查测试覆盖率:
|
1 2 3 4 |
|
更多推荐


所有评论(0)