单元测试框架 - 框架
“unittest”支持测试自动化、共享测试的设置和关闭代码、将测试聚合到集合中以及测试与报告框架的独立性。
unittest 模块提供的类可以轻松支持一组测试的这些质量。
为了实现这一目标,unittest 支持以下重要概念 -
测试夹具- 这表示执行一项或多项测试以及任何相关清理操作所需的准备工作。例如,这可能涉及创建临时或代理数据库、目录或启动服务器进程。
测试用例- 这是最小的测试单元。这会检查对一组特定输入的特定响应。unittest 提供了一个基类TestCase,可用于创建新的测试用例。
测试套件- 这是测试用例、测试套件或两者的集合。这用于聚合应一起执行的测试。测试套件由 TestSuite 类实现。
测试运行器- 这是一个协调测试执行并向用户提供结果的组件。运行器可以使用图形界面、文本界面或返回特殊值来指示执行测试的结果。
创建单元测试
编写简单的单元测试涉及以下步骤 -
步骤 1 - 在程序中导入单元测试模块。
步骤 2 - 定义要测试的函数。下面的例子中,要测试add()函数。
步骤 3 - 通过子类化 unittest.TestCase 创建一个测试用例。
步骤 4 - 将测试定义为类内的方法。方法名称必须以“test”开头。
步骤 5 - 每个测试都调用 TestCase 类的断言函数。断言有很多种类型。以下示例调用assertEquals() 函数。
步骤 6 -assertEquals() 函数将 add() 函数的结果与 arg2 参数进行比较,如果比较失败,则抛出断言错误。
步骤 7 - 最后,从 unittest 模块调用 main() 方法。
import unittest def add(x,y): return x + y class SimpleTest(unittest.TestCase): def testadd1(self): self.assertEquals(add(4,5),9) if __name__ == '__main__': unittest.main()
步骤 8 - 从命令行运行上述脚本。
C:\Python27>python SimpleTest.py . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
步骤 9 - 以下三个可能是测试的可能结果 -
先生编号 | 消息和描述 |
---|---|
1 | 好的 测试通过。控制台上显示“A”。 |
2 | 失败 测试未通过,并引发 AssertionError 异常。控制台上显示“F”。 |
3 | 错误 该测试引发除 AssertionError 之外的异常。控制台上显示“E”。 |
这些结果分别通过“.”、“F”和“E”显示在控制台上。
命令行界面
可以从命令行使用unittest模块来运行单个或多个测试。
python -m unittest test1 python -m unittest test_module.TestClass python -m unittest test_module.TestClass.test_method
unittest 支持以下命令行选项。有关所有命令行选项的列表,请使用以下命令 -
Python –m unittest -h
先生编号 | 选项和说明 |
---|---|
1 | -h,--帮助 显示此消息 |
2 | v,--详细 详细输出 |
3 | -q,--安静 最小输出 |
4 | -f, --failfast 第一次失败时停止 |
5 | -c,--catch 捕获 control-C 并显示结果 |
6 | -b,--缓冲区 在测试运行期间缓冲 stdout 和 stderr |