PyUnit 教程:Python 单元测试框架(附示例)
什么是单元测试?
使用 Python 进行单元测试是为了在应用程序开发阶段的早期发现错误,此时错误较少出现且修复成本较低。
单元测试是用 Python 设计的脚本代码级别测试,用于验证一个小的“单元”功能。单元测试是一个基于测试夹具的面向对象的框架。
Python 单元测试技术
Python 单元测试主要涉及在不访问任何依赖代码的情况下测试特定模块。开发人员可以使用存根和模拟等技术将代码分成“单元”并在各个部分上运行单元级测试。
- 测试驱动开发 TDD: 单元测试应该与 Python 一起完成,为此开发人员使用测试驱动开发方法。在 TDD 方法中,您首先设计 Python 单元测试,然后才继续编写将实现此功能的代码。
- 存根和模拟: 它们是模拟正在测试的假方法的两种主要技术。一个存根 用于填写单元测试正确运行所需的一些依赖项。一个模拟 另一方面是一个假对象,它运行我们放置断言的测试。
这两种方法的目的是相同的,以消除对类或函数的所有依赖项的测试。
Python 单元测试框架
为了使单元测试过程更容易并提高项目的质量,建议使用 Python 单元测试框架。单元测试框架包括
- PyUnit: PyUnit 支持用于代码自动化测试的夹具、测试用例、测试套件和测试运行器。在 PyUnit 中,您可以将测试用例组织到具有相同夹具的套件中
- 鼻子: Nose 的内置插件可帮助您进行输出捕获、代码覆盖、文档测试等。Nose 语法非常简单,减少了编写测试的障碍。它扩展了 Python unittest 以使测试更容易。
- 文档测试: Doctest 测试脚本在文件底部带有小函数的 docstring 中。 Doctest 允许您通过运行文档中包含的示例并验证它们是否返回了预期的结果来测试您的代码。 doctest 的用例不太详细,也没有捕捉到特殊情况。它们可用作模块及其组件的主要用例的表达性文档。
使用 PyUnit 进行单元测试
Pyunit 是 JUnit 的 Python 端口。作为 Pyunit 的一部分,在 unittest 模块中有五个关键类。
- TestCase 类 :TestCase 类承载测试例程并提供用于制作每个例程并随后清理的钩子
- TestSuite 类 :作为一个集合容器,它可以拥有多个testcase对象和多个testsuites对象
- TestLoader 类 :此类加载本地或从外部文件定义的测试用例和套件。它发出一个拥有这些套件和案例的测试套件对象
- TextTestRunner 类 :要运行测试,它需要一个标准平台来执行测试
- TestResults 类 :它为测试结果提供了一个标准容器
使用 PyUnit 为 Python 测试设计测试用例
单元测试提供了一个基类,即测试用例,可用于创建新的测试用例。为了设计测试用例,使用了三组方法
unittest.TestCase
setUp() teardown() skipTest(aMesg:string) fail(aMesg:string) id():string shortDescription():string
第一组是测试前和测试后的钩子。 setup() 方法在每个测试例程之前开始,teardown() 在例程之后开始。
第二组方法控制测试执行。两种方法都将消息字符串作为输入,并且都取消正在进行的测试。但是 skiptest() 方法会中止当前测试,而 fail() 方法则完全失败。
最后一种或第三种方法有助于确定测试。方法 id() 返回一个由测试用例对象和测试例程名称组成的字符串。而 shortDescription() 方法在每个测试例程开始时返回 docstr 注释。
使用 Python 单元测试的优势
- 它可以帮助您在开发周期的早期发现错误
- 它可以帮助您编写更好的程序
- 它可以与其他测试方法和工具轻松同步
- 它会有更少的错误
- 以后修改起来更容易,影响也更小
Python