初识单元测试框架

Posted haauleon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识单元测试框架相关的知识,希望对你有一定的参考价值。

认识单元测试

对于单元测试框架,它主要完成以下三件事:

1.提供用例组织与执行

  为什么要考虑到测试用例的组织问题呢?这是因为当我们的测试用例多达成百上千条时,这就产生了一些很严重的问题——测试用例的维护性问题以及扩展管理性问题等,而单元测试框架就是用来解决用例的规范与组织问题。

2.提供丰富的比较方法

  说到比较方法,先简单描述一下什么是软件Bug——通俗讲Bug就是实际结果与预期结果之间的差异,而预期结果来源于需求,因此可以概括成与需求不符即Bug。因此无论是功能测试还是单元测试,都需要将实际结果与预期结果进行比较(断言),以此来判断该条测试用例是否执行通过。单元测试框架提供了丰富的断言方法,例如,判断  ==  or  !=in  or  not inTrue  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单元测试框架编写的单元测试用例<<<<<

 

以上是关于初识单元测试框架的主要内容,如果未能解决你的问题,请参考以下文章

unittest详解 unittest初识

Python系列之初识unittest

Junit单元测试初识

Google开源C++单元测试框架Google Test

四则运算单元测试

初识gauge自动化测试框架