韩昊 20190919-4 单元测试,结对

此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7629

结对伙伴:刘信鹏

git地址: https://e.coding.net/secret/ASETest1_3.git

实用语言:Python

集成环境:Pycharm

测试框架:UnitTest

测试内容:本周作业  四则运算试题生成

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

功能1 测试用例

ID

测试用例

预期结果

1

输入f4

出现运算表达式,换行打印?

2

f4后输入正确答案

提示:“答对啦,你真是个天才!”并给出下一题及换行后的问号

3

f4后输入错误答案

提示:“再想想吧,答案似乎是x喔!”并给出下一题及换行后的问号

4

测试运算符是否只包含加减乘除

输出结果的运算符中只含有加减乘除

功能2 测试用例

ID

测试用例

预期结果

5

准确回答固定X题目,查看是否与输出正确题目一致

你一共答对X道题,共20道题

6

用户输入f4后,观察给出的20道算术表达式是否含有括号

括号出现状况存在,并出现位置合理

7

使用TDD工具UnitTest测试算式表达式转化成逆波兰式是否正确情况:不含括号。输入中缀表达式:6/9+8-4  输入中缀表达式的后缀表达式:69/8+4-

输出为:表达式转换成逆波兰式功能单元测试结束。

表达式求值功能测试完成

8

使用TDD工具UnitTest测试算式表达式计算结果是否正确情况。输入一个四则运算:1+1+3+8 输入一个正确答案:13

输出为:表达式求值功能单元测试结束。

表达式求值功能测试完成

9

使用TDD工具UnitTest测试算式表达式计算结果是否正确情况:含两个括号。输入:((7+3)-6)*2 输入一个正确答案:8

输出为: 表达式求值功能单元测试结束。

表达式求值功能测试完成

 

功能3测试用例  

ID

测试用例

预期结果

10

用户输入 f4 -c -5

输出:题目数量必须是正整数

11

用户输入 f4 –c 0.7

输出:题目数量必须是正整数

12

用户再次输入 f4 –c  3

按格式正确输入3道题,且有答案

 

 

要求2 在博客报告测试用例全部fail 到 全部pass 的过程,报告事实 (fail到修改代码或者测试用例,到pass) 以及收获。 除了最初的框架,测试用例中存在一次性pass没有经过fail的,也报告一次性通过,给出如此优秀地实现了这部分功能的代码。(40分)

 功能三测试:

测试用户输入对应题目后生成的题目数量

fail:测试功能三f4 -c 10 报错,重现如下:

其中原因为未将str型转换为int型,找到错误代码:

class Test(object):
    def __init__(self):
        pass
    def _f4(self):
        pass
    def _fun3(self,num):
        if num.isdigit() and (num) > 0:
            print_exp_result(num)
        else:
            print('题目数量必须是 正整数。')
        return (0)
知识兔

 修改后代码如下:

class Test(object):
    def __init__(self):
        pass
    def _f4(self):
        pass
    def _fun3(self,num):
        if num.isdigit() and int(num) > 0:
            print_exp_result(int(num))
        else:
            print('题目数量必须是 正整数。')
        return (0)
知识兔

修改后测试结果如图:

其他重要pass用例重现:

含括号表达式计算测试重现:

 不含括号表达式计算测试:

 表达式转换成逆波兰式功能测试:

重要代码展示:

# 表达式转换成逆波兰式功能测试
    def test_middle_to_after(self):
        print("表达式转换成逆波兰式功能单元测试开始:")
        _eq = input("输入一个四则运算中缀表达式:")
        _eq_ans = input("输入此中缀表达式的后缀表达式:")
        self.assertEqual(_eq_ans, Test()._test_middle_to_after(eq=_eq))
        print("表达式转换成逆波兰式功能单元测试结束。", end='\n\n')
        print("表达式求值功能测试完成", end='\n\n')

    # 表达式求值功能测试(不含括号)
    def test_answer_nobra(self):
        print("表达式求值功能单元测试(不含括号)开始:")
        _eq = input("输入一个四则运算:")
        _eq_ans = input("输入一个正确的答案:")
        self.assertEqual(_eq_ans ,Test()._test_answer(eq = _eq))
        print("表达式求值功能单元测试结束。", end='\n\n')
        print("表达式求值功能测试完成", end='\n\n')

    # 表达式求值功能测试(含括号)
    def test_answer_bra(self):
        print("表达式求值功能单元测试(含括号)开始:")
        _eq = input("输入一个四则运算:")
        _eq_ans = input("输入一个正确的答案:")
        self.assertEqual(_eq_ans, Test()._test_answer(eq=_eq))
        print("表达式求值功能单元测试结束。", end='\n\n')
        print("表达式求值功能测试完成", end='\n\n')
知识兔

总体收获:

  由于是第一次进行单元测试,所以在执行上略显稚嫩,完成的总体效率也不是十分可观。不过UnitTest框架在pycharm中使用还算相对简单,这也却保了单元测试的顺利进行。在编写测试用例时,为了力求测试方式的创新,做了很多努力。通过两个人的积极讨论,对可能出现的结果进行预测,真的有利于更好地完成程序功能。

要求3 做好准备,在接下的一周你可能无法通过别人的测试用例。 (0分)


ID测试用例预期结果10用户输入 f4 -c -5输出:”题目数量必须是 正整数”11用户输入 f4 –c 0.7输出:”题目数量必须是 正整数”12用户再次输入 f4 –c  3按格式正确输入3道题,且有答案

计算机