UnitTest 框架

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

unittest 模块提供的类可轻松为测试集支持这些特性。

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

  • 测试装置 − 这表示执行一个或多个测试所需的准备工作以及任何相关的清理操作。这可能涉及创建临时或代理数据库、目录或启动服务器进程等。

  • 测试用例 − 这是最小的测试单元。这会检查对特定输入集的特定响应。 unittest 提供了一个基类 TestCase,可用于创建新的测试用例。

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

  • 测试运行器 − 这是一个协调测试执行并向用户提供结果的组件。运行器可以使用图形界面、文本界面或返回特殊值来指示执行测试的结果。

创建单元测试

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

步骤 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 − 以下三个可能是测试的可能结果 −

Sr.No 消息和说明
1

OK

测试通过。控制台上显示"A"。

2

FAIL

测试未通过,并引发 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

Sr.No 选项和说明
1

-h, --help

显示此消息

2

v, --verbose

详细输出

3

-q, --quiet

最小输出

4

-f, --failfast

第一次失败时停止

5

-c, --catch

捕获 control-C 并显示结果

6

-b, --buffer

在测试运行期间缓冲 stdout 和 stderr