结对编程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)表格