目录
一. 介绍
Python单元测试框架,有时称为“PyUnit”,是由kentbeck 和erichgamma 编写的JUnit的Python语言版本。JUnit是Kent的Smalltalk测试框架的Java版本。每一个都是其各自语言的事实上的标准单元测试框架。
unittest 支持测试自动化,共享测试的设置和关闭代码,将测试聚合到集合中,以及测试独立于报告框架。unittest 模块提供的类使支持一组测试的这些质量变得容易。
unittest
单元测试框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。
二. 说明
为了实现这些,unittest
通过面向对象的方式支持了一些重要的概念。
测试脚手架
test fixture 表示为了开展一项或多项测试所需要进行的准备工作,以及所有相关的清理操作。举个例子,这可能包含创建临时或代理的数据库、目录,再或者启动一个服务器进程。
测试用例
一个测试用例是一个独立的测试单元。它检查输入特定的数据时的响应。
unittest
提供一个基类:TestCase
,用于新建测试用例。
测试套件
test suite 是一系列的测试用例,或测试套件,或两者皆有。它用于归档需要一起执行的测试。
测试运行器(test runner)
test runner 是一个用于执行和输出测试结果的组件。这个运行器可能使用图形接口、文本接口,或返回一个特定的值表示运行测试的结果。
通过 setUp()
和 tearDown()
方法,可以设置测试开始前与完成后需要执行的指令。
unittest.main()
提供了一个测试脚本的命令行接口。
其实还有其他方法可以以更精细的控制级别、更少的简洁输出以及不需要从命令行运行来运行测试,此处暂时不讨论(实例中给出注释)。
2.1 命令行模式
unittest 模块可以通过命令行运行模块、类和独立测试方法的测试;
python -m unittest test_module - run tests from test_module
python -m unittest module.TestClass - run tests from module.TestClass
python -m unittest module.Class.test_method - run specified test method
你可以传入模块名、类或方法名或他们的任意组合。
在运行测试时,你可以通过添加 -v 参数获取更详细(更多的冗余)的信息。
python -m unittest -v test_module
用于获取命令行选项列表:
python -m unittest -h
在 2.7 版更改: 在早期版本中,只支持运行独立的测试方法,而不支持模块和类。
三. 实例
# -*- coding:utf-8 -*-
import unittest
class Test_Constant(unittest.TestCase):
'''the test constant'''
@classmethod
def setUpClass(cls):
print("...the set up...")
def test_constant(self):
self.assertEqual("1", "1", "the test fail.")
@classmethod
def tearDownClass(cls):
print
print("...the tear down...")
if __name__ == '__main__':
# suite = unittest.TestLoader().loadTestsFromTestCase(Test_Constant)
# unittest.TextTestRunner(verbosity=2).run(suite)
unittest.main()
以上例子演示了 unittest
中最常用的、足够满足许多日常测试需求的特性。
四. 参考
- https://docs.python.org/zh-cn/2.7/library/development.html
- https://docs.python.org/zh-cn/2.7/library/unittest.html
- https://docs.python.org/zh-cn/3/library/unittest.html
- https://code.visualstudio.com/docs/python/testing
- https://github.com/microsoft/vscode/issues/103303
- https://stackoverflow.com/questions/15514593/importerror-no-module-named-when-trying-to-run-python-script
- https://stackoverflow.com/questions/8321130/python-module-import-issues-in-command-prompt
- https://stackoverflow.com/questions/56254424/visual-studio-code-cannot-detect-my-tests
(完)