单元测试的定义和目的相关介绍
什么是单元测试?
对单个模块或者单个类或者单个函数进行测试,一般是开发做的,按照阶段来分就是单元测试,集成测试,系统测试,验收测试。
为什么要做单元测试?
- 单元测试之后才是集成测试,单个单个的功能模块测试通过之后,才能把单个功能模块集成起来做集成测试,为了从底层发现bug,减少合成后出现的问题。
- 越早发现bug越好,这样也可以早点发现问题,不然问题累积到后面,如果做错了就要推倒重来,对时间和经费来说是非常浪费的。
单元测试语法介绍
- 引入pycharm自带的单元测试类:unittest 创建一个测试类,来测试你要测试的目标对象:class
TestMath(unittest.TestCase) - 引入你要测试的代码模块或者是类名:from class_s_test import add
- 创建单元测试用例对测试目标进行测试:def test_add(self)
语法:函数用test开头,然后拼接下划线,再加函数名,里面的内容就是创建实例来调用方法 - 引入断言,对测试结果进行判断处理 Self.assertEqul(实际结果,预期结果,如果出错出错处理)
- 引入异常判断,对测试用例进行异常判断处理:try…except… 错误类型:AssertionError
- 引入测试,方便批量进行单元测试
完整的单元测试很少只执行一个测试用例,开发人员通常需要编写多个测试用例来对某一软件功能进行比较完成的测试,这些相关的测试用例称为一个测试用例集,用TestSuite(),用addTest执行测试集,用到的是TextTestRunner(),用runner
举个栗子:
文件名class_4_test.py
class Math:
def __init__(self,a,b):
self.a=a
self.b=b
def add(self):
return (self.a+self.b)
def Jian(self):
return (self.a-self.b)
def Cheng(self):
return (self.a*self.b)
def Chu(self):
return (self.a/self.b)
文件名:class_4_单元测试.py
import unittest #1.1引入自带的单元测试类
from class_4_test import Math #2.引入刚写的类Math(引入要测试的代码模块或者类名)
class TestMath(unittest.TestCase):#1.2创建一个测试类TestMath来测试你要测试的目标对象。unittest.TestCase做单元测试的类
def test_add(self): #3.创建单元测试用例对测试目标进行测试,函数用test开头,然后拼接下划线,再加函数名,里面的内容就是创建实例来调用方法。
try:#5.引入异常判断,对测试用例进行异常判断处理:try...except... 错误类型AssertionError
tester=Math(9,3) #创建一个实例
result_add=tester.add() #返回一个结果值存到result_add中
self.assertEqual(result_add,6,"答案不是6,所以答案是错误的!") #4.引入断言,对测试结果进行判断处理(self.assertEqual固定写法),Self.assertEqul(实际结果,期望结果,如果出错出错处理)
print("我在检验加法程序")
except AssertionError as e:
print("出错原因是%s"%e) #格式化输出
print("加法程序出错啦!")
def test_Jian(self):
try:
tester1=Math(8,2)
result_Jian=tester1.Jian()
self.assertEqual(result_Jian,3,"答案不是3,所以答案是错误的!")
print("我在检验加法程序")
except AssertionError as e:
print("出错原因是%s" % e) # 格式化输出
print("加法程序出错啦!")
def test_Cheng(self):
try:
tester2=Math(8,2)
result_Cheng=tester2.Cheng()
self.assertEqual(result_Cheng,3,"答案不是3,所以答案是错误的!")
print("我在检验加法程序")
except AssertionError as e:
print("出错原因是%s" % e) # 格式化输出
print("加法程序出错啦!")
def test_Chu(self):
try:
tester3=Math(8,2)
result_Chu=tester3.Chu()
self.assertEqual(result_Chu,3,"答案不是3,所以答案是错误的!")
print("我在检验加法程序")
except AssertionError as e:
print("出错原因是%s" % e) # 格式化输出
print("加法程序出错啦!")
文件名:class_4_suit.py
import unittest
from class_4_单元测试 import TestMath
suite=unittest.TestSuite() #6.创建一个测试集,方便批量进行单元测试
suite.addTest(TestMath("test_add"))
suite.addTest(TestMath("test_Jian"))
suite.addTest(TestMath("test_Cheng"))
suite.addTest(TestMath("test_Chu"))
runner=unittest.TextTestRunner() #创建一个实例,执行测试集用runner
runner.run(suite)