一、实验题目
异常处理和单元测试
二、实验目的
- 了解异常的基本概念和常用异常类。
- 掌握异常处理的格式、处理方法。
- 掌握断言语句的作用和使用方法。
- 了解单元测试的基本概念和作用。
- 掌握在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.y
def sub(self):
return self.x - self.y
def mul(self):
return self.x * self.y
def div(self):
return self.x / self.y
def __init__(self, x, y):
self.x = x
self.y = y
class 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换成就可以啦;