Python 标准库中的 unittest 模块, 提供了代码测试功能 . 我们可以通过单元测试来验证所定义的函数是否符合预期. 一个函数一般会定义一组的单元测试 (也叫做测试用例), 通过这些测试用例来判断该函数在各种边界条件下, 函数的行为是否符合预期 . 大型项目中要做到全覆盖测试比较困难, 所以在最初阶段, 只会针对代码的重要行为来编写测试用例. 而后, 在项目的发展过程中, 再逐步完善测试用例.
1 第一个单元测试
假设有这样的一个函数, 它会返回格式化后的待读信息:
- def to_read(book_name):
- '''想读的书'''
- return '我想读《' + book_name + '》咯'
现在创建一个单元测试:
- import unittest
- from book_function import to_read
- class BookTestCase(unittest.TestCase):
- '''测试 book_function.py'''
- def test_read(self):
- '''测试 read 函数'''
- result = to_read('现代艺术 150 年 : 一个未完成的故事')
- self.assertEqual(result, '我想读《现代艺术 150 年 : 一个未完成的故事》咯')
- if __name__ == '__main__':
- unittest.main()
单元测试类必须继承自 unittest.TestCase 类, 这样 Python 才会运行我们编写的测试逻辑.
在此, 使用了 unittest 类的断言方法 assertEqual. 通过断言方法, 我们就可以判定结果是否与期望结果相一致.
运行结果:
2 测试不通过
假设 to_read() 函数需要扩展, 加入一个 book_type 参数, 用于定义该书所归属的领域:
- def to_read(book_name, book_type):
- '''想读的书'''
- content = '我想读《' + book_name + '》咯,'
- content += '它属于' + book_type + '领域'
- return content
这时, 如果再次运行之前编写好的单元测试用例, 就会抛出异常:
第一行 FAILED, 表示没有完全通过测试, errors 指出了出错个数.
测试用例一般会包含多个单元测试, 所以我们可以通过 Traceback 找到出错的单元测试, 精确到行数.
发生测试不通过现象时, 首先要做的是冷静, 通过 Traceback , 找到问题所在, 修改函数或者单元测试代码, 以符合预期行为.
在这个示例中, 我们尝试修改单元测试代码:
- def test_read(self):
- '''测试 read 函数'''
- result = to_read('现代艺术 150 年 : 一个未完成的故事','艺术')
- self.assertEqual(result, '我想读《现代艺术 150 年 : 一个未完成的故事》咯, 它属于艺术领域')
是不是测试通过啦 O(∩_∩)O 哈哈~
来源: http://www.jianshu.com/p/6df0cf08d9c5