第十一章
测试用例,这是本书基础章节的最后一章,具体内容和测试有关。
python标准库 unittest 提供了代码测试工具。
被测试函数如下:(写在Bclass.py文件中)
def Add_number(a ,b,c=10):
return a+b+c
测试用例如下:(要求继承unittest.TestCase类)
from Bclass import Add_number
import unittest
class test_example(unittest.TestCase): #这里要求继承该类
def test_Add_number(self): #函数名必须以test开头
d=Add_number(1,2,3)
self.assertEqual(d,6) #断言判断二者是否相等
if __name__=='__main__': #当该文件被作为程序入口执行时
unittest.main() #该判断语句会生效。
显然我们知道,返回的结果显然和6是相符的,因此程序返回内容如下:
如果我们修改该测试用例,断言修改为7,输出结果如下:
由于我们程序中并没有出现任何bug,但是断言判断无法通过,这时候返回的是fail(F),如果程序中出现了bug,例如我们传递了四个参数,输出结果如下:
将会返回Error(E),除此之外还有一点需要注意,见如下代码:
from Bclass import Add_number
import unittest
class test_example(unittest.TestCase):
def test_Add_number2(self):
d=Add_number(1,2,3)
self.assertEqual(d,6)
def test_Add_number(self):
d=Add_number(1,2,4)
self.assertEqual(d,7)
if __name__=='__main__':
unittest.main()
程序执行后会检测 text_example中所有以test开头的函数。
如果其中有任意一个测试函数有问题,程序都将提出错误。并且附带详细的错误信息。
对一个类进行测试;
其本质上和前面对函数功能的测试是相同的,下面是示例:
类代码(写在Aclass.py文件中)
class Qtest:
def __init__(self,number):
self.number=number
self.names=[]
print(f"该班的序号是:{self.number}")
def apply_insert(self,name):
if name not in self.names:
self.names.append(name)
else:
print("该名称的学生已经存在!")
def shownames(self):
print("----------------------分割线--------------------------")
for name in self.names:
print(name)
print("----------------------分割线--------------------------")
测试 文件 写在main.py中
import unittest
from Aclass import Qtest
class testAclass(unittest.TestCase):
def test_TestAclass(self):
example_Aclass=Qtest(7)
examplenames=[]
for i in range(0,3):
namep=input("请输入名称:")
examplenames.append(namep)
for name in examplenames:
example_Aclass.apply_insert(name)
for name in examplenames:
self.assertIn(name,example_Aclass.names)
if __name__=="__main__":
unittest.main()
此类负责录入 所有7班的学生,不允许重名(hhh)
按照提示测试即可。
如果 测试类有多个测试函数,其可能任务是类似的(测试同一个类),使用的测试数据可能都是相同的,那我们不必再每个测试函数内都写上同样的测试数据,而是采用python的特殊函数setUp()
众所周知,启动unittest.main()函数执行后,会执行继承unittest类的子类中所有以test开头的函数,那么使用setUp函数,可以在运行所有test开头的函数前,先运行setUp函数(你可以理解为一个默认初始化函数),我们可以利用这个默认初始化函数实现测试数据的初始化。
此处就不再展示使用方法了,至此为止,python的前11章基础部分就全部结束了,后面将花费不到一星期,完成后续三个实例的编写。