四则运算-单元测试

队友:李志强 201421123028 连永刚 201421123014 

coding 地址:https://git.coding.net/lizhiqiang0x01/sizeyunsuan-TestExample.git


 

一、题目要求

1、通过单元测试代码,测试加法是否能正确工作;

2、通过单元测试代码,测试加减乘除功能。

3、通过单元测试代码,测试计算类对于各种参数的支持:

     a. 输入是有错误的,例如 “1 ++ 2”,

     b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”,

     c. 或者是 “ 248 / 0” 怎么办?

     d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?

     e. 那么如果真的计算结果是 “-1” 又怎么处理呢?

4、通过增量修改的方式,改进程序, 完成对各种错误情况的处理。

二、实验步骤

需求分析

通过单元测试代码,测试程序加减乘除功能是否正确工作,对于格式错误、数值溢出、除零异常是否能检测的到。

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

测试加减乘除功能

TEST_METHOD(TestAdd)    //测试加法
        {
            Test.CheckInput("1/2+4");
            Assert::AreEqual(test11,Test.add());
        }
        TEST_METHOD(TestAdd1)
        {
            Test.CheckInput("3+1/3");
            Assert::AreEqual(test12, Test.add());
        }
        TEST_METHOD(TestAdd2)
        {
            Test.CheckInput("2+4");
            Assert::AreEqual(test13, Test.add());
        }
        TEST_METHOD(TestAdd3)
        {
            Test.CheckInput("1/2+1/4");
            Assert::AreEqual(test14, Test.add());
        }

        TEST_METHOD(TestSub)           //测试减法
        {
            Test.CheckInput("1/2-1/3");
            Assert::AreEqual(test21, Test.sub());
        }

        TEST_METHOD(TestSub1)
        {
            Test.CheckInput("1/3-2");
            Assert::AreEqual(test22, Test.sub());
        }
        TEST_METHOD(TestSub2)
        {
            Test.CheckInput("2-1/3");
            Assert::AreEqual(test23, Test.sub());
        }
        TEST_METHOD(TestSub3)
        {
            Test.CheckInput("5-3");
            Assert::AreEqual(test24, Test.sub());
        }

        TEST_METHOD(TestMul)       //测试乘法
        {
            Test.CheckInput("1×2");        
            Assert::AreEqual(test31, Test.mul());
        }
        TEST_METHOD(TestMul1)
        {
            Test.CheckInput("1/2×2");
            Assert::AreEqual(test32, Test.mul());
        }
        TEST_METHOD(TestMul2)
        {
            Test.CheckInput("2×1/3");
            Assert::AreEqual(test33, Test.mul());
        }
        TEST_METHOD(TestMul3)
        {
            Test.CheckInput("1/3×1/2");
            Assert::AreEqual(test34, Test.mul());
        }
        TEST_METHOD(TestDiv)       //测试除法
        {
            Test.CheckInput("1/2÷2");
            Assert::AreEqual(test41, Test.div());
        }
        TEST_METHOD(TestDiv1)
        {
            Test.CheckInput("4÷1/2");
            Assert::AreEqual(test42, Test.div());
        }
        TEST_METHOD(TestDiv2)
        {
            Test.CheckInput("1/2÷2/3");
            Assert::AreEqual(test43, Test.div());
        }
        TEST_METHOD(TestDiv3)
        {
            Test.CheckInput("1÷2");
            Assert::AreEqual(test44, Test.div());
        }

单元测试加法功能

string Calc::add()
{
    size_t iPos = g_szInput.find('+');
    g_szX = g_szInput.substr(0, iPos);
    g_szY = g_szInput.substr(iPos+1, g_szInput.length()-1-iPos);
    size_t iPosInX = g_szX.find('/');
    g_iFirNer = stoi(g_szX.substr(0, iPosInX));
    if (iPosInX == -1)
    {
        g_iFirDer = 1;
    }
    else
    {
        g_iFirDer = stoi(g_szX.substr(iPosInX+1, g_szInput.length() - 1 - iPosInX));
    }
    size_t iPosInY = g_szY.find('/');
    g_iSecNer = stoi(g_szY.substr(0, iPosInY));
    if (iPosInY == -1)
    {
        g_iSecDer = 1;
    }
    else
    {
        g_iSecDer = stoi(g_szY.substr(iPosInY+1, g_szInput.length() - 1 - iPosInY));
    }
    simplify(g_iFirNer, g_iFirDer, g_iSecNer, g_iSecDer);  
    g_iRusNer = g_iFirNer*g_iSecDer + g_iFirDer*g_iSecNer;
    g_iRusDer = g_iFirDer*g_iSecDer;
    init(g_iRusNer, g_iRusDer);    //约分成真分数
    g_szRusDer = "";
    g_szRusNer = "";
    if (g_iRusDer == 1)
    {
        g_szRusNer += to_string(g_iRusNer);
        return  g_szRusNer;
    }
    else{
        g_szRusDer += to_string(g_iRusDer);
        g_szRusNer += to_string(g_iRusNer);
        return  g_szRusNer + "/" + g_szRusDer;
    }
}

测试结果

三、PSP

PSP2.1Personal Software Process StagesEstimated time(h)actual time(h)
Planning计划11.5
· Estimate估计这个任务需要多少时间1015
Development开发810
· Analysis需求分析 (包括学习新技术)0.51
· Design Spec生成设计文档22
· Design Review设计复审0.30.5
· Coding Standard代码规范0.50.4
· Design具体设计1.51.3
· Coding具体编码87
· Code Review代码复审0.51
· Test测试(自我测试,修改代码,提交修改)0.20.5
Reporting报告22
·测试报告0.50.5
·计算工作量0.51
·并提出过程改进计划24

 

 四、总结

感受:由于之前没有接触过单元测试确实让人不知如何下手,以至于要不断请教他人,网上查阅。对一些代码进行注释是很有必要的,不然很容易忘记。通过单元测试能较快的发现问题,对编程过程较大的帮助节省时间。

 先来一片面包:按照题目要求将各个功能模块进行分割,并进行单元测试

再把肉放上:在进行单元测试的过程中,由于对变量定义的不够规范严谨,志强和永刚能较快的发现问题的所在,经过我们的探讨交流,再加上志强扎实的编程能力,我们对代码做了很大的改进,我们使用匈牙利命名方法对变量进行命名,使得问题得以顺利解决。

再来一片面包:通过此次单元测试,要做好一个软件并非一己之力能够轻易完成,一个良好的团队协作能事半功倍、开阔自己的视野、发现自己所不能察觉的问题。

 

转载于:https://www.cnblogs.com/dialect/p/6640295.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值