梁梦瑶 20190919-4 单元测试

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

git地址:https://e.coding.net/sxl357/f4.git

结对伙伴:宋晓丽

使用语言:python

测试框架:UnitTest

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

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

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

错误一:

在测试循环出题功能时出现错误:

发现是由于如果用户输入?的话就会出错。于是我们找到对应的函数进行了修改:加上对问号的替换,如果用户输入?就将"?"替换为""。

原代码:

def question():
    num = 0
    global correctNumber  # 定义全局变量,统计答对的次数
    while num <20:
        generate=Expression() #定义对象
        expression = generate.expre()#调用generate()函数,生成运算式
        print(expression + "=")
        expression1 = make_Expression(expression)  # 将中缀表达式转换为后缀表达式
        result = make_Value(expression1)  # 计算后缀表达式的值
        userAnswer = input()  # 输入你的答案
        if (float(userAnswer) == float(result)):  # 判断用户结果是否和正确答案相等
            correctNumber += 1
            print("答对了,你真是个天才!")
        else:
            result = str(result)
            print('再想想吧,答案似乎是' + result + '喔!')
        num += 1
    correctNumber = str(correctNumber)
    print("你一共答对" + correctNumber + "道题,共20道题。")

修改后代码:

def question():
    num = 0
    global correctNumber  # 定义全局变量,统计答对的次数
    while num <20:
        generate=Expression() #定义对象
        expression = generate.expre()#调用generate()函数,生成运算式
        print(expression + "=")
        expression1 = make_Expression(expression)  # 将中缀表达式转换为后缀表达式
        result = make_Value(expression1)  # 计算后缀表达式的值
        userAnswer = input()  # 输入你的答案
        if '?' in userAnswer:
            userAnswer = userAnswer.replace('?', '')#str.replace(old,new,max)方法,把字符中的old替换成new,且替换不超过max次
        if (float(userAnswer) == float(result)):  # 判断用户结果是否和正确答案相等
            correctNumber += 1
            print("答对了,你真是个天才!")
        else:
            result = str(result)
            print('再想想吧,答案似乎是' + result + '喔!')
        num += 1
    correctNumber = str(correctNumber)
    print("你一共答对" + correctNumber + "道题,共20道题。")

修改后截图:

错误二

还是循环出题测试出错,计算后缀表达式时出错。对于循环出题这一部分是我们做这个题的障碍部分,做的时候查阅了大量的资料,在测试的时候也是一直出错,我们又一遍一遍的对这一部分进行了修改。

原代码

def make_Value(s):
    lists=[]
    for i in s:
        if i in ['+','-','*','/']:
            b=lists.pop()#先弹出的是b,下个弹出的是a
            a=lists.pop()
            c=0
            if i=='+':#判断做哪则运算
                c=a+b
            elif i=='-':
                c=a-b
            elif i=='*':
                c=a*b
            else:
                c=a/b
            lists.append(c)#得到的结果压入栈中
        else:
            lists.append(i)
    return lists[0]

修改后:

def make_Value(s):
    lists=[]
    for i in s:
        if i in ['+','-','*','/']:
            b=float(lists.pop())#先弹出的是b,下个弹出的是a
            a=float(lists.pop())
            c=0
            if i=='+':#判断做哪则运算
                c=a+b
            elif i=='-':
                c=a-b
            elif i=='*':
                c=a*b
            else:
                c=a/b
            lists.append(c)#得到的结果压入栈中
        else:
            lists.append(i)
    return lists[0]

修改后截图

错误三:
判断用户答案和结果是否相等的时候出现错误:

 我们发现输入正确的答案,结果是错的,后来计算了多道题时发现,输入整数都是错误的,只有输入浮点数才能正确。

原代码

def question():
    num = 0
    global correctNumber  # 定义全局变量,统计答对的次数
    while num <20:
        generate=Expression() #定义对象
        expression = generate.expre()#调用generate()函数,生成运算式
        print(expression + "=")
        expression1 = make_Expression(expression)  # 将中缀表达式转换为后缀表达式
        result = make_Value(expression1)  # 计算后缀表达式的值
        userAnswer = input()  # 输入你的答案
        if '?' in userAnswer:
            userAnswer = userAnswer.replace('?', '')#str.replace(old,new,max)方法,把字符中的old替换成new,且替换不超过max次
        if (userAnswer==result):  # 判断用户结果是否和正确答案相等
            correctNumber += 1
            print("答对了,你真是个天才!")
        else:
            result = str(result)
            print('再想想吧,答案似乎是' + result + '喔!')
        num += 1
    correctNumber = str(correctNumber)
    print("你一共答对" + correctNumber + "道题,共20道题。")

修改后:

将判断结果是否相等部分进行了修改,将用户的输入转换为浮点数再进行比较
        if (float(userAnswer) == float(result)):  # 判断用户结果是否和正确答案相等
            correctNumber += 1
            print("答对了,你真是个天才!")
        else:
            result = str(result)
            print('再想想吧,答案似乎是' + result + '喔!')

最终截图:

将错误一二三完成修正后:最后终于全部通过了。三个测试通过的截图如下:

表达式求值功能

循环出题测试:

 规范化输出测试

猜你喜欢

转载自www.cnblogs.com/summerkingy/p/11585536.html