初识单元测试框架
Posted haauleon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识单元测试框架相关的知识,希望对你有一定的参考价值。
认识单元测试
对于单元测试框架,它主要完成以下三件事:
1.提供用例组织与执行
为什么要考虑到测试用例的组织问题呢?这是因为当我们的测试用例多达成百上千条时,这就产生了一些很严重的问题——测试用例的维护性问题以及扩展管理性问题等,而单元测试框架就是用来解决用例的规范与组织问题。
2.提供丰富的比较方法
说到比较方法,先简单描述一下什么是软件Bug——通俗讲Bug就是实际结果与预期结果之间的差异,而预期结果来源于需求,因此可以概括成与需求不符即Bug。因此无论是功能测试还是单元测试,都需要将实际结果与预期结果进行比较(断言),以此来判断该条测试用例是否执行通过。单元测试框架提供了丰富的断言方法,例如,判断 == or != 、in or not in 、True or False 等。
3.提供丰富的日志
当用例执行失败时能抛出清晰的失败原因,当所有用例执行完成后能提供丰富的执行结果。例如,总执行时间、失败用例数、成功用例数等。
一、认识unittest
什么是单元测试?单元测试负责对最小的软件设计单元(模块)进行验证——通过一段代码去验证另一段代码,它使用软件设计文档中对模块的描述作为指南,对重要的程序分支进行测试以发现模块中的错误。最小的模块,不同领域有不同的理解,像C里面的一个函数,C++里面的一个类。在Python语言下有诸多单元测试框架,如doctest、unittest(原名PyUnit框架)、pytest、nose等。unittest框架为Python语言自带的单元测试框架,Python2.1及其以后的版本已将unittest作为一个标准模块放入Python开发包中。
>>>>>接下来演示不用测试框架的单元测试<<<<<
首先编写被测试类calculator.py
1 #calculator.py 2 3 #计算器类 4 class Count: 5 6 #通过__init()__方法对两个数进行初始化 7 def __init__(self,a,b): 8 self.a = float(a) 9 self.b = float(b) 10 11 #加法返回一个只保留小数点后两位的浮点数 12 def add(self): 13 return round(self.a + self.b,2)
接下来编写单元测试代码test_calculator.py,需放在与calculator.py同级的目录下
1 #test_calculator.py 2 3 from calculator import Count 4 5 #测试两个浮点数相加 6 class TestCount: 7 8 def test_add(self): 9 try: 10 c = Count(3.111,6.229) 11 add = c.add() 12 #编写断言即预期结果 13 assert(add == 9.34),‘Float addition result error!‘ 14 except AssertionError as msg: 15 print(msg) 16 else: 17 print(‘Test pass‘) 18 19 #执行测试类的测试方法 20 mytest = TestCount() 21 mytest.test_add()
执行结果:
1 ========= RESTART: C:/Haauleon/Unittest/20180421/test_calculator.py ========= 2 Test pass
1 ========= RESTART: C:/Haauleon/Unittest/20180421/test_calculator.py ========= 2 Float addition result error!
总结无测试框架的单元测试的弊端:由于测试代码的写法没有一定的规范可遵循,所以十个程序员有可能写出十种不同的代码,由于代码的不统一所以维护起来非常麻烦。而且,如上,测试代码明显要比被测试代码要多得多,然而悲伤的是,不可能一个类仅仅只编写一条测试用例。所以,为了让单元测试代码更容易维护和编写,最好的方式就是要遵循一定的规范来编写测试用例,这也是单元测试框架诞生的初衷。
>>>>>接下来演示用unittest单元测试框架编写的单元测试用例<<<<<
以上是关于初识单元测试框架的主要内容,如果未能解决你的问题,请参考以下文章