• 作业 20180925-4 单元测试


    此作业要求参见: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.确保代码的可扩展性。而且因为此次测试提高了我们的代码质量,方便我们以后更好的维护代码更好的设计系统,使每个成员的功能模块能更透明化,解决耦合度高的问题,尽量使代码处于低耦合状态。 

  • 相关阅读:
    如何检查项目的需求是否完整
    Linux环境 Java内存快速查看
    字符串拼接性能比较出乎意料的结果
    MySQL 查看表大小
    五大机器学习微信公众号推荐
    如何用PYTHON代码写出音乐
    【转载】机器学习如门概览
    机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)
    【转载】程序猿转型AI必须知道的几件事!
    如何拿到阿里算法校招offer
  • 原文地址:https://www.cnblogs.com/nenusoft/p/9756768.html
Copyright © 2020-2023  润新知