Python 的单元测试之 unittest

testtools


Overview

Basic example

随着项目的不断扩大,单元测试在保证开发效率、可维护性和软件质量等方面的地位越发举足轻重,是一本万利的举措。Python 常用 unittest module 编写单元测试,它包含四个概念:

  • test fixture:初始化和清理测试环境,比如创建临时的数据库,文件和目录等,其中 setUp()setDown() 是最常用的方法
  • test case:单元测试用例,TestCase 是编写单元测试用例最常用的类
  • test suite:单元测试用例的集合,TestSuite 是最常用的类
  • test runner:执行单元测试

例如:

执行结果如下:

Add fixture

setUp()setDown() 允许执行每个测试用例前分别初始化和清理测试环境,用法如下:

Ignore some testcases

有时希望某些用例不被执行,unittest.skip() 提供了忽略某个测试用例的功能,用法如下:

执行结果如下:


Run your tests

Command Line Interface

unittest 提供了丰富的命令行入口,可以根据需要执行某些特定的用例。有了命令行的支持,上述例子的最后两行代码就显得冗余,应当被移除:

执行 testdemo.py 文件所有的测试用例:

执行 testdemo.py 文件的 TestStringMethods 类的所有测试用例:

执行 testdemo.py 文件 TestStringMethods 类的 test_upper:

Test Discovery

unittest 提供了自动匹配发现并执行测试用例的功能,随着项目代码结构越发庞大,势必有多个测试文件,自动匹配发现并测试用例的功能在此就显得非常有用,只要满足 load_tests protocol 的测试用例都会被 unittest 发现并执行,测试用例文件的默认匹配规则为 test*.py。通过一条命令即可执行所有的测试用例,如此就很容易被 tox 等测试工具所集成。使用如下:

参数如下:

假设现在要被测试的代码目录如下:


A Collection of Assertion


Testtools

testtools is a set of extensions to the Python standard library’s unit testing framework.

testtools 是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。由于在用法上 testtools 和 unittest 类似,所以本节简要介绍 testtols 的特点:

  • Better assertion methods: 支持 assertIn, assertIs, assertIsInstance 等 assertion
  • More debugging info: 更为详细的 debug 信息
  • Extend unittest, but stay compatible and re-usable: 兼容 unittest
  • Cross-Python compatibility: 支持多种 Python 版本 2.7, 3.3, 3.4, 3.5

更为详细的说明和用法请见 testtools: tasteful testing for Python

1 3 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部