python单元测试框架unittest

什么是单元测试?

单元测试是负责对最小的软件设计单元(模块)进行验证。

python语言下有很多单元测试框架,例如unittest、pytest、doctest等,其中unittest为python语言中自带的单元测试框架。

 

下面给出一个比较简单的unittest单元测试脚本

 1 import unittest     # 导入unittest模块
 2 
 3 
 4 class TestCount(unittest.TestCase):     # 定义测试类子类,继承父类unittest.TestCase中所有的方法
 5 
 6     def setUp(self):        # setUp()方法用于测试案例执行之前的初始化工作
 7         print("test start")
 8 
 9     def test_add(self):     # 定义测试用例部分,必须是以test开头命名,可以定义多个测试用例的方法
10         result_1 = input("Enter a number!\n")
11         result_1 = int(result_1)
12         self.assertEqual(result_1, 113, msg="something is wrong")       # 可使用unittest.TestCase类下的各种断言方法用于对结果的判断
13 
14     def test_add2(self):        # 第二条测试用例
15         result_2 = 18 * 8
16         self.assertEqual(result_2, 144, msg="Result is wrong")
17 
18     def tearDown(self):     # tearDown()方法与setUp()方法相对应,用于测试用例执行之后的善后工作,为下一条case的执行留下一个干净的环境
19         print("test end")
20 
21 
22 if __name__ == "__main__":      # 该部分使用main()方法将一个单元测试模块变成可以直接运行的脚本
23     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()方法来实现。举个例子,这可能包含创建临时或代理的数据库、目录,再或者启动一个服务器进程。

 

  • unittest中常用的断言方法:

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

--未完待续

posted @ 2020-01-05 19:35  Jockey浩  阅读(223)  评论(0编辑  收藏  举报