• 结对编程2——单元测试


    结对编程2——单元测试

    组员:
    王钧任 201421123109
    曾丽君 201421123101

    码市地址

    题目描述:

    上一周大家为四则运算程序设计了2-3个新功能,本次在隔了一周之后,我们循序渐进地进阶。本次目标:
    
            把计算模块提取出来,单独创建一个类。
            针对提取出来的计算类的接口函数做单元测试。
            通过单元测试代码,测试加法是否能正确工作;
            通过单元测试代码,测试加减乘除功能。
            通过单元测试代码,测试计算类对于各种参数的支持。
    

    需求分析:单元测试能够让我们写的代码更加健全,能够让程序能够不用牵一发而动全身,大大

             的改善了后期的维护花费的工作量。
    

    设计测试框架, 模拟测试数据:

            因为我前几次是用C写的,这次测试将计算模块抽出写成了C++。
    

    类的定义:

    class TrivialCalculator
    {
    public:
        double Add(double x, double y);
        double Subtract(double x, double y);
        double Multiply(double x, double y);
        double Divide(double x, double y);
        int gcd(int x, int y);
        string cal(char op,int z,int y);
        string zfcal(char op, int z1, int y1, int z2, int y2);
        string calinput(string s);
    };
    

    计算模块的测试用例及运行结果:

    公约数测试

    TEST_METHOD(gcdTest)
            {
                //TrivialCalculator test;
                int actual = test->gcd(6,3);
                int expected = 3;
                Assert::AreEqual(expected, actual);
            }
    

    整数计算测试

    TEST_METHOD(calTest)
            {
                string actual = test->cal('+', 3, 4);
                string expected = "7";
                Assert::AreEqual(expected, actual);
                actual = test->cal('+', 3, 4);
                expected = "8";
                Assert::AreNotEqual(expected, actual);
                actual = test->cal('-', 9, 8);
                expected = "1";
                Assert::AreEqual(expected, actual);
                actual = test->cal('-', 9, 8);
                expected = "2";
                Assert::AreNotEqual(expected, actual);
                actual = test->cal('*', 9, 8);
                expected = "72";
                Assert::AreEqual(expected, actual);
                actual = test->cal('-', 9, 8);
                expected = "2";
                Assert::AreNotEqual(expected, actual);
                actual = test->cal('/', 9, 7);
                expected = "9/7";
                Assert::AreEqual(expected, actual);
                actual = test->cal('/', 9, 8);
                expected = "2";
                Assert::AreNotEqual(expected, actual);
            }
    

    真分数计算测试

    TEST_METHOD(zfcalTest)
            {
                //TrivialCalculator test;
                string actual = test->zfcal('+', 1, 3,1,3);
                string expected = "6/9";
                Assert::AreEqual(expected, actual);
                actual = test->zfcal('+', 1, 3, 1, 3);
                expected = "1/3";
                Assert::AreNotEqual(expected, actual);
                actual = test->zfcal('-', 2, 3, 1, 3);
                expected = "3/9";
                Assert::AreEqual(expected, actual);
                actual = test->zfcal('-', 2, 3, 1, 3);
                expected = "2";
                Assert::AreNotEqual(expected, actual);
                actual = test->zfcal('*', 2, 3, 1, 3);
                expected = "2/9";
                Assert::AreEqual(expected, actual);
                actual = test->zfcal('*', 2, 3, 1, 3);
                expected = "2";
                Assert::AreNotEqual(expected, actual);
                actual = test->zfcal('/', 2, 3, 1, 3);
                expected = "6/3";
                Assert::AreEqual(expected, actual);
                actual = test->zfcal('*', 2, 3, 1, 3);
                expected = "2";
                Assert::AreNotEqual(expected, actual);
            }
    

    输入问题测试

    TEST_METHOD(calinputTest)
            {
                //TrivialCalculator test;
                string actual = test->calinput("1++2");
                string expected = "输入错误!";
                Assert::AreEqual(expected, actual);
                actual = test->calinput("1++2");
                expected = "输入正确!";
                Assert::AreNotEqual(expected, actual);
                actual = test->calinput("1/2+8/0");
                expected = "输入错误!";
                Assert::AreEqual(expected, actual);
            }
    


    这里未通过是因为我将expected输入错误。

    代码覆盖率:

    关于代码覆盖率,我用的是VS2013自带的代码覆盖率分析,但不知道为什么出错了。如图

    根据图中显示,进入网页查询。代码覆盖率疑难解答
    按照网页教程操作仍未解决。如果助教或老师知道解决方法,烦请告知,不胜感激。

    小结与感受:

    之前的代码我们已经做到了至少是好一些的规划,每每要用到一个新方法时候,都不在这个方法里面直接写,而是重新写一个目标方法,单元测试我觉得很有意义,
    能够让我写代码时候能够把一个方法写到尽量完美无缺,减少了以后的修改量,还是得代码,条理清晰,一看到就能知道功能,不用再从头开始想,这段代码的意义。

    在隔了一周之后再看之前的代码,是否更能体会到下面这些东西

    (1) 良好的设计
    良好的设计能使我们在编写代码时减少很多不必要的问题。之前的题目中就是因为一开始的设计不好结果功能出现了很多问题。
    (2) 编码规范
    编码规范能加快代码的编写,尤其是合作写代码,如果代码不规范,会加重理解代码负担。
    (3) 必要的注释
    注释真的很重要,过了一段时间看这些自己写过的还真的有点东西很陌生,这时候注释就很重要了。如果没有这些注解,回忆这些方法还真需要一些时间。
    也可以让同一项目的人理解代码的作用。

    PSP(Personal Software Process)表格

  • 相关阅读:
    List<T> 添加 DataTable
    sql 在not in 子查询有null值情况下经常出现的陷阱
    SQL查询~ 存在一个表而不在另一个表中的数据
    SQL Server xtype
    jQurey 获取当前时间
    sp_rename
    Longest Substring Without Repeating Characters
    Fraction to Recurring Decimal
    链表翻转系列
    蓄水池抽样
  • 原文地址:https://www.cnblogs.com/wjunren/p/6637060.html
Copyright © 2020-2023  润新知