一、实验题目
异常处理和单元测试
二、实验目的
- 了解异常的基本概念和常用异常类。
- 掌握异常处理的格式、处理方法。
- 掌握断言语句的作用和使用方法。
- 了解单元测试的基本概念和作用。
- 掌握在Python中使用测试模块进行单元测试的方法和步骤。
三、实验内容
- 编程实现如下功能:
- 定义一个利用列表实现队列的类List_Queue,可以实现队列元素进入、删除、求队列长度等功能。
- 定义个异常处理类List_Queue_Exception对类List_Queue中可能出现的异常进行处理。
- 编程实现如下功能:
- 定义一个实现算术运算的类Arithmetic_Operation,可以实现两个整数的加法、减法、乘法和除法运算。
- 定义一个测试类Test_Arithmetic_Operation对Arithmetic_Operation中的功能进行测试。
四、实验步骤
题目一
(1)问题分析(含解决思路、使用的数据结构、程序流程图等)
首先:定义两个Class类,一个队列类List_Queue和一个异常处理类List_Queue_Exception;
其次:在队列类里面都定义几个函数,一个是对队列初始化操作list=[],一个用来实现对于队列元素进入append(),一个是对于队列的删除(即出队)pop(),一个是对于队列长度len(),一个是对于队列的输出print();
然后:在主函数中,根据需求做出一个实验的提示,做一个判断循环,如果是输入的的序号是自己想要哒,就做出相应的回应,直接调用函数;
其中:对于异常函数的使用,这个列表是有的时候,才能进行一系列的操作,如果没有这个列表抛出异常;
最后:输出结果。
(2)算法/代码描述(基本要求源代码)
class List_Queue:# 初始化def __init__(self):self.list1 = []print('初始化成功!')# 入队def enqueue(self, item):self.list1.append(item)print('添加成功!')# 出队def dequeue(self):if len(self.list1) > 0:print("出队列数据:", self.list1(0))self.list1.pop(0)else:raise List_Queue_Exception()# 返回队列长度def lenqueue(self):return len(self.list1)# 输出队列def l_queue(self):print(self.list1)
class List_Queue_Exception(BaseException):def __init__(self):print("列表为空!")
if __name__ == '__main__':list_queue = List_Queue()print("-----------------")print("*****1:入队*****")print("*****2:出队*****")print("*****3:队列长度*")print("*****4:显示列表*")print("*****0:退出*")print("-----------------")while True:x = int(input("输入序号:"))try:if x in [0, 1, 2, 3, 4]:if x == 0:print("已经退出")break;elif x == 1:y = input("请输入输入的数据:")list_queue.enqueue(y)elif x == 2:list_queue.dequeue()elif x == 3:print("队列长度为:", list_queue.lenqueue())elif x == 4:list_queue.l_queue()else:print("输入有误!")except BaseException as ex:print(ex)
(3)运行结果(含执行结果验证、输出显示信息)
题目二
(1)问题分析(含解决思路、使用的数据结构、程序流程图等)
首先:定义两个类,一个是算术运算类一个是测试类,算术运算类里面初始化两个数x和y,定义四个函数,一个是整数的加法,一个是整数的减法,一个是整数的乘法和一个除法运算;
其次:定义测试类,定义测试类必须是以test开头,定义两个数,一个是1,一个是6,对于加法来说结果为7,对于减法来说是-5,对于乘法来说是6,对于除法来说是1/6;
然后:执行测试,进行单元测试的常用库的Unittest;
(2)算法/代码描述(基本要求源代码)
import unittest
class Arithmatic_Operation:def add(self):return self.x + self.ydef sub(self):return self.x - self.ydef mul(self):return self.x * self.ydef div(self):return self.x / self.ydef __init__(self, x, y):self.x = xself.y = yclass Test_Arithmetic_Operation(unittest.TestCase):def setUp(self):self.op = Arithmatic_Operation(1, 6)def test_add(self):if self.assertEqual(self.op.add(), 7):print("正确")def test_sub(self):self.assertEqual(self.op.sub(), -5)def test_mul(self):self.assertEqual(self.op.mul(), 6)def test_div(self):self.assertEqual(self.op.div(), 1 / 6)if __name__ == '__main__':unittest.main()
(3)运行结果(含执行结果验证、输出显示信息)
五、出现的问题及解决的方法
出现的问题
(1)在第一个实验时,出现'list' object is not callable错误;
(2)出现这个0.16666666666666666 != 0.167;
解决的办法
(1)找到对应的list的地方换成list1;
(2)这块必须是等于1/6换成就可以啦;