单元测试框架 - 框架


“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