单元测试框架 - 框架



“unittest” 支持测试自动化、测试的设置和关闭代码共享、将测试聚合到集合中以及测试与报告框架的独立性。

unittest 模块提供了一些类,可以轻松地为一组测试支持这些特性。

为了实现这一点,unittest 支持以下重要概念:

  • 测试装置 (test fixture) - 这表示执行一个或多个测试所需的准备工作以及任何相关的清理操作。这可能包括,例如,创建临时或代理数据库、目录或启动服务器进程。

  • 测试用例 (test case) - 这是测试的最小单位。它检查对特定输入集的特定响应。unittest 提供了一个基类 TestCase,可用于创建新的测试用例。

  • 测试套件 (test suite) - 这是测试用例、测试套件或两者的集合。它用于聚合应一起执行的测试。测试套件由 TestSuite 类实现。

  • 测试运行器 (test runner) - 这是协调测试执行并将结果提供给用户的组件。运行器可以使用图形界面、文本界面或返回特殊值以指示测试执行的结果。

创建单元测试

编写简单的单元测试涉及以下步骤:

步骤 1 - 在程序中导入 unittest 模块。

步骤 2 - 定义要测试的函数。在下面的示例中,add() 函数将被测试。

步骤 3 - 通过子类化 unittest.TestCase 创建测试用例。

步骤 4 - 将测试定义为类中的方法。方法名称必须以“test”开头。

步骤 5 - 每个测试都调用 TestCase 类的 assert 函数。有许多类型的断言。下面的示例调用 assertEquals() 函数。

步骤 6 - assertEquals() 函数将 add() 函数的结果与 arg2 参数进行比较,如果比较失败则抛出 AssertionError 异常。

步骤 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

OK

测试通过。“A”显示在控制台上。

2

FAIL

测试未通过,并引发 AssertionError 异常。“F”显示在控制台上。

3

ERROR

测试引发了除 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, --help

显示此消息

2

v, --verbose

详细输出

3

-q, --quiet

最小输出

4

-f, --failfast

在第一次失败时停止

5

-c, --catch

捕获 Control-C 并显示结果

6

-b, --buffer

在测试运行期间缓冲标准输出和标准错误

广告