snowphy 2020-01-05
什么是单元测试?
单元测试是负责对最小的软件设计单元(模块)进行验证。
python语言下有很多单元测试框架,例如unittest、pytest、doctest等,其中unittest为python语言中自带的单元测试框架。
下面给出一个比较简单的unittest单元测试脚本
import unittest # 导入unittest模块 class TestCount(unittest.TestCase): # 定义测试类子类,继承父类unittest.TestCase中所有的方法 def setUp(self): # setUp()方法用于测试案例执行之前的初始化工作 print("test start") def test_add(self): # 定义测试用例部分,必须是以test开头命名,可以定义多个测试用例的方法 result_1 = input("Enter a number!\n") result_1 = int(result_1) self.assertEqual(result_1, 113, msg="something is wrong") # 可使用unittest.TestCase类下的各种断言方法用于对结果的判断 def test_add2(self): # 第二条测试用例 result_2 = 18 * 8 self.assertEqual(result_2, 144, msg="Result is wrong") def tearDown(self): # tearDown()方法与setUp()方法相对应,用于测试用例执行之后的善后工作,为下一条case的执行留下一个干净的环境 print("test end") if __name__ == "__main__": # 该部分使用main()方法将一个单元测试模块变成可以直接运行的脚本 unittest.main()
在python标准库关于unittest的官方说明文档中,开篇就给出了比较重要的4个基本概念:
测试用例(TestCase)
一个测试用例是一个独立的测试单元。它检查输入特定的数据时的响应。 unittest
提供一个基类: TestCase
,用于新建测试用例。
测试套(TestSuite)
test suite 是一系列的测试用例,或测试套件,或两者皆有。它用于归档需要一起执行的测试。
测试运行器(test runner)
test runner 是一个用于执行和输出测试结果的组件。这个运行器可能使用图形接口、文本接口,通过TextTestRunner类提供的run()方法来执行test suite或test case。
测试脚手架(test fixture)
test fixture 表示为了开展一项或多项测试所需要进行的准备工作,以及所有相关的清理操作,一般通过TestCase中的setUp()和tearDown()方法来实现。举个例子,这可能包含创建临时或代理的数据库、目录,再或者启动一个服务器进程。
msg:判断不成立时需要返回的字符串
assertEqual(a, b, msg=“”)
判断两个参数相等:first == second
assertNotEqual(a, b, msg=“”)
判断两个参数不相等:first != second
assertIn(member, container, msg=“”)
判断是字符串是否包含:member in container
assertNotIn(self, member, container, msg=“”)
判断是字符串是否不包含:member not in container
assertTrue(x,msg=“”)
判断是否为真:bool(x) is True
assertFalse(x, msg=“”)
判断是否为假:bool(x) is False
assertIsNone(obj, msg=“”)
判断是否为None:obj is None
assertIsNotNone(obj, msg=“”)
判断是否不为None:obj is not None
--未完待续