• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
笼中鸟
stay hungry stay foolish
博客园    首页    新随笔    联系   管理    订阅  订阅
20200924-3 单元测试,结对

此作业要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11243

代码地址:https://e.coding.net/xucancan1/sizeyunsuan/sizeyunsuan.git

说明:测试代码在test单元测试文件夹中test.py

结伴小伙伴:史志腾

使用语言:python

测试框架:UnitTest

测试内容:四则运算试题生成

要求1 对每个功能,先给出测试用例,然后再编码功能。请注意把测试用例视为功能需求完成的检验指标。 (40分)

编号 测试用例 预期结果
1

执行功能1随机产生表达式

Creat_exp1函数随机产生一个式子:
5-3+9+1
式子产生运算通过
功能1的Creat_exp1函数单元测试通过结束。

2

输入一个四则运算:1+2+4*4

输入一个后缀表达式:12+44*+

 

Reverse1函数单元测试结束。
功能1中缀表达式转化成后缀表达式功能测试完成

3 执行功能2随机产生表达式  

Creat_exp函数随机产生一个式子:
1+(6+5)-6
功能2的Creat_exp函数单元测试通过结束。

4  

输入一个四则运算:1+(1*3)/6
输入一个正确的答案:1.5

 

Countvalue函数单元测试结束。
功能3表达式求值功能测试完成

5

输入一个四则运算:1+(1/3-1)-1
输入一个正确的答案:-2/3

count函数单元测试结束。
功能4表达式求值功能测试完成

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

要求2 在博客报告测试用例全部fail 到 全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。 除了最初的框架,测试用例中存在一次性pass没有经过fail的,也报告一次性通过,给出如此优秀地实现了这部分功能的代码。由2位同学中的一位发布博客提交到作业,指明自己的结对伙伴;另一位在作业中引用这一博客,指明自己的结对伙伴。(40分)

错误一:使用测试用例2

功能1在使用中缀表达式转化为后缀表达式错误

错误的源码:

 1 #将中缀表达式转化成后缀表达式
 2 def Reverse1(s):
 3     ophead=[]  #类似于操作符栈
 4     result="" #以字符串的形式保存后缀表达式
 5     rank={"+":1,"-":1,"*":2,"/":2}  #定义字符串的优先级
 6     for x in s:
 7         if x in ["+","-","*","/"]:  #判断当前元素是否是操作符
 8             if(len(ophead)==0):   #如果栈为空,操作符进栈
 9                 ophead.append(x)
10             elif(rank[ophead[-1]]>=rank[x]):  #如果当前操作符的优先级小于ophead栈顶的元素优先级,则出栈
11                 while(len(ophead)>0 and rank[ophead[-1]]>=rank[x]): #出栈,直到栈为空或者当前元素优先级大于栈顶元素
12                     op=ophead.pop()
13                     result=result+op
14                 ophead.append(x)  #当前元素的优先级大于栈顶元素的优先级,当前元素进栈
15             else: #如果当前元素的优先级大于ophead栈顶的元素优先级,则操作符进栈
16                 ophead.append(x)
17         else: #如果当前元素是操作数
18             result=result+x

原因:我们发现最后的操作符栈没有空,没有全部输出,所以造成错误

修改后的源码:

 1 #将中缀表达式转化成后缀表达式
 2 def Reverse1(s):
 3     ophead=[]  #类似于操作符栈
 4     result="" #以字符串的形式保存后缀表达式
 5     rank={"+":1,"-":1,"*":2,"/":2}  #定义字符串的优先级
 6     for x in s:
 7         if x in ["+","-","*","/"]:  #判断当前元素是否是操作符
 8             if(len(ophead)==0):   #如果栈为空,操作符进栈
 9                 ophead.append(x)
10             elif(rank[ophead[-1]]>=rank[x]):  #如果当前操作符的优先级小于ophead栈顶的元素优先级,则出栈
11                 while(len(ophead)>0 and rank[ophead[-1]]>=rank[x]): #出栈,直到栈为空或者当前元素优先级大于栈顶元素
12                     op=ophead.pop()
13                     result=result+op
14                 ophead.append(x)  #当前元素的优先级大于栈顶元素的优先级,当前元素进栈
15             else: #如果当前元素的优先级大于ophead栈顶的元素优先级,则操作符进栈
16                 ophead.append(x)
17         else: #如果当前元素是操作数
18             result=result+x
19     while(len(ophead)>0):#当ophead栈不为空时,输出栈,直到为空
20         op=ophead.pop()
21         result=result+op
22     return result
23         

修改后的运行截图:

错误二:使用测试用例4

功能3中计算后缀表达式中出错

 

错误源码:

 1 #计算后缀表达式
 2 def Countvalue(s):
 3     headlists=[]
 4     for i in s:
 5         if i in ['+','-','*','/']:
 6             b=float(headlists.pop())#栈顶元素出栈
 7             a=float(headlists.pop())  #继续栈顶元素出栈
 8             c=0
 9             if i=='+':#两个操作数做四则运算
10                 c=a+b
11             elif i=='-':
12                 c=a-b
13             elif i=='*':
14                 c=a*b
15             else:
16                 c=a//b
17             headlists.append(c)#得到的结果压入栈中
18         else:
19             headlists.append(i)
20     return headlists[0]

原因:我们发现四则运算中我们错误的把//当成了/处理,造成了错误,给我们浪费了很多时间。

修改后的源码:

 1 #计算后缀表达式
 2 def Countvalue(s):
 3     headlists=[]
 4     for i in s:
 5         if i in ['+','-','*','/']:
 6             b=float(headlists.pop())#栈顶元素出栈
 7             a=float(headlists.pop())  #继续栈顶元素出栈
 8             c=0
 9             if i=='+':#两个操作数做四则运算
10                 c=a+b
11             elif i=='-':
12                 c=a-b
13             elif i=='*':
14                 c=a*b
15             else:
16                 c=a/b
17             headlists.append(c)#得到的结果压入栈中
18         else:
19             headlists.append(i)
20     return headlists[0]

修改后的运行截图:

 

posted on 2020-10-06 11:47  xucancan  阅读(172)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3