此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11243
要求1 对每个功能,先给出测试用例,然后再编码功能。请注意把测试用例视为功能需求完成的检验指标。
功能1、2 测试用例
编号 | 测试用例 | 预期结果 |
1 | 输入f4 | 随机生成表达式,在下一行输出提示 ? |
2 | 输入正确答案 | 答对了,你真是个天才! |
3 | 输入错误答案 | 再想想吧,答案似乎是x |
功能1测试代码:
def test_ques(self): print("单元测试开始") question = input("请输入四则运算表达式:") answer = input("请输入正确答案: ") self.assertEqual(answer,f4.ques(ques = question)) print("单元测试结束!")
功能1运行结果:
功能2测试代码:
def test_result(self): print("单元测试开始") self.assertEqual(None,f4.result()) print("单元测试结束!")
功能2运行结果:
功能3,4测试用例
编号 | 测试用例 | 预期结果 |
1 | 输入f4 -c test | 题目数量必须是正整数 |
2 | 输入f4 -c -300 | 题目数量必须是正整数 |
3 | 输入 f4 -c -3.5 | 题目数量必须是正整数 |
4 | 输入 f4 -c 3 | 输出表达式和小数计算结果并输出到data.txt |
5 | 输入 f4 -c 3 | 输出表达式和分数计算结果并输出到data.txt |
功能3,4测试代码:
def test_command_input(self): print("单元测试开始") #输入参数 number = input("请输入有效参数:") self.assertEqual(f4.command_input(number),0) print("单元测试结束!")
功能3运行结果:
功能4运行结果:
要求2 在博客报告测试用例全部fail到全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。 除了最初的框架,测试用例中存在一次性pass没有经过fail的,也报告一次性通过,给出如此优秀地实现了这部分功能的代码。
功能1:
将用eval()函数获取到的结果转为int型,即if float(res) == float(ans),因计算结果可能是小数,会使得输入与输出无法比较。
后变为if float(res) == float(ans),结果不能空着否则仍然报错。
最后修改为用字符串接收,通过测试。
功能2:
开始没有考虑到括号匹配,只是让括号随机生成,结果报错。
后添加如下代码对括号进行匹配后,通过测试。
#括号匹配 if left1 == 0: left2 = 1 left3 = 1 if right1 == 2: right2 = 1 right3 = 1 else: right2 = 2 right3 = 1 else: if left2 == 0: left3 = 1 right1 = 1 if right2 == 2: right3 = 1 else: right3 = 2 else: left3 = 0 right1 = 1 right2 = 1 right3 = 2
功能4:
遍历计算结果将分子、分母分别存储到两个字典中后,在取出时,将分子和分母弄颠倒,虽然输出计算结果,但结果不对。
将分子、分母转化为十进制的过程中,取出的第一个数是个位数,应该乘以10的0次方,因逻辑搞错,导致运算结果不对。
一次性通过的主要代码:
#命令行输入题目数目 def command_input(num): data = open('data.txt','w+') if num.isdigit(): for i in range(int(num)): question = ques() question1 = question + '=' res = Fraction(eval(question)).limit_denominator(100000) print('{:<50}{:<25}'.format(question1,traversal_dist(str(res)))) print('{:<50}{:<25}'.format(question1,traversal_dist(str(res))),file = data) else: print("题目数量必须是正整数。")
要求3 使用coding.net做版本控制。checkin 前要求清理临时文件、可执行程序,通常执行 build-clean可以达到效果。
coding.net中地址:https://e.coding.net/amancer/calculate/calculate.git