此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2146
一. 测试相关事项
git地址:https://git.coding.net/tianl364/Arithmetic_Demo.git
单元测试代码详见上述git地址中的Unit_Test.py
结对伙伴:田良
集成环境:pycharm
编程语言:python
测试框架:Unittest
二.单元测试代码
import unittest from f4 import * class TestMathFunc(unittest.TestCase): def test_f4(self): pass # 表达式求值功能测试 def test_f4_answer(self): print("expression_to_value函数单元测试开始:") _eq = input("输入一个四则运算:") _eq_ans = input("输入一个正确的答案:") self.assertEqual(_eq_ans ,f4()._f4_answer(eq = _eq)) print("expression_to_value函数单元测试结束。", end=' ') print("表达式求值功能测试完成", end=' ') # 循环出题功能测试 def test_f4_input(self): print("circular_problem函数单元测试开始:") self.assertEqual(0,f4()._f4_input()) print("circular_problem函数单元测试结束。", end=' ') print("循环出题功能测试完成", end=' ') # 规范化出题功能测试 def test_f4_integer_parser(self): print("normalize_exp函数单元测试开始:") x = input("输入命令行参数:") self.assertEqual(0,f4()._f4_integer_parser(x)) print("normalize_exp函数单元测试结束。", end=' ') print("规范化出题功能测试完成", end=' ') # 单元测试入口 if __name__ == "__main__": unittest.main()
表达式求值功能的测试结果如下,主要包括中缀表达式转后缀表达式,后缀表达式计算等功能。
在求值时测试用例出现了bug,产生了格式不匹配的问题,实例如下:
修改了格式部分的代码如下:
theAnswer = input() # 判断“?”字符是否存在 if '?' in theAnswer: theAnswer = theAnswer.replace('?', '') do_judge(float(theAnswer), value)
修改过后单元测试顺利通过,效果如下:
循环出题功能的测试结果如下:
通过命令行参数规范化出题功能的测试结果如下:
测试结果:
在修改过格式问题后未出现较大bug,各项数据都是一次通过
一次性通过的代码如下:
# 将中缀表达式转换为后缀表达式 def middle_to_after(s): expression = [] ops = [] for item in s: if item in ['+', '-', '*', '/']: while len(ops) >= 0: if len(ops) == 0: ops.append(item) break op = ops.pop() if op == '(' or ops_rule[item] > ops_rule[op]: ops.append(op) ops.append(item) break else: expression.append(op) elif item == '(': ops.append(item) elif item == ')': while len(ops) > 0: op = ops.pop() if op == '(': break else: expression.append(op) else: expression.append(item) while len(ops) > 0: expression.append(ops.pop()) return expression # 计算后缀表达式 def expression_to_value(expression): stack_value = [] for item in expression: if item in ['+', '-', '*', '/']: n2 = stack_value.pop() n1 = stack_value.pop() result = cal(n1, n2, item) stack_value.append(result) else: stack_value.append(int(item)) return stack_value[0] # 四则运算规则 def cal(n1, n2, op): if op == '+': return n1 + n2 if op == '-': return n1 - n2 if op == '*': return n1 * n2 if op == '/': return n1 / n2
三. 在单元测试中的心得体会
在测试中了解到了测试的目的1.确保代码的质量;2确保代码的可维护性;3.确保代码的可扩展性。而且因为此次测试提高了我们的代码质量,方便我们以后更好的维护代码更好的设计系统,使每个成员的功能模块能更透明化,解决耦合度高的问题,尽量使代码处于低耦合状态。