UnitTest单元测试框架最初是受JUnit的启发,与其他语言中的主要单元测试框架具有相似的风格。它支持测试自动化、共享测试的设置和关闭代码、将测试聚合到集合中以及独立于报告框架的测试。
为了实现这一点,UnitTest以面向对象的方式支持一些重要的概念:
test fixture
test fixture表示执行一个或多个测试所需的准备,以及任何相关的清理操作。例如,这可能涉及创建临时或代理数据库、目录或启动服务器进程。
test case
test case是测试的单个单元。它检查对特定输入集的特定响应。UnitTest提供了一个基类TestCase,可以用来创建新的测试用例。
test suite
test suite是测试用例、测试套件或两者的集合。它用于聚合应该一起执行的测试。
test runner
test runner是一个组件,它协调测试的执行并向用户提供结果。运行程序可以使用图形界面、文本界面,或者返回一个特殊值来指示执行测试的结果。
基本实例
UnitTest模块为构建和运行测试提供了一套丰富的工具。本节演示了工具的一小部分足以满足大多数用户的需求。
下面是测试三种字符串方法的简短脚本:
通过对unittest.testcase子类化创建一个testcase。这三个单独的测试是用以字母测试开头的方法定义的。此命名约定通知测试运行程序哪些方法表示测试。
每个测试的关键是调用assertEqual()以检查预期结果;调用assertTrue()或assertFalse()以验证条件;或调用assertRaises()以验证是否引发了特定的异常。使用这些方法而不是断言语句,这样测试运行程序就可以累积所有的测试结果并生成一个报告。
Setup()和TearDown()方法允许您定义将在每个测试方法之前和之后执行的指令。它们在组织测试代码一节中有更详细的介绍。
最后一个块显示了一种运行测试的简单方法。main()为测试脚本提供命令行接口。从命令行运行时,上面的脚本生成如下输出:
将-v选项传递给测试脚本将指示unittest.main()启用更高级别的详细性,并生成以下输出:
以上示例显示了最常用的UnitTest特性,这些特性足以满足许多日常测试需求。文档的其余部分从第一个原则探索完整的特性集。
命令行界面
可以从命令行使用UnitTest模块从模块、类甚至单个测试方法运行测试:
您可以通过模块名和完全限定的类或方法名的任意组合传入一个列表。
测试模块也可以通过文件路径指定:
这允许您使用shell文件名完成来指定测试模块。指定的文件必须仍然可以作为模块导入。通过删除“.py”并将路径分隔符转换为“.”将路径转换为模块名。如果要执行不可作为模块导入的测试文件,则应直接执行该文件。
您可以通过传递-v标志来运行更详细(更详细)的测试: