结队编程2-单元测试(107 120)
码市链接:https://git.coding.net/Luojiening/TeamworkTest.git
a. 需求分析:
1.把计算模块提取出来,单独创建一个类。
2.针对提取出来的计算类的接口函数做单元测试。
3.通过单元测试代码,测试计算类对于各种参数的支持;
a. 输入是有错误的,例如 “1 ++ 2”,
b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”,
c. 或者是 “ 248 / 0” 怎么办?
d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?
e. 那么如果真的计算结果是 “-1” 又怎么处理呢?
b. 设计测试框架, 模拟测试数据:
1.加减乘除功能测试
TEST_METHOD(AddTest) { Assert::AreEqual(test->Add(1.0, 2.0), 3.0); Assert::AreEqual(test->Add(5.0, 2.0), 7.0); } TEST_METHOD(SubtractTest) { Assert::AreEqual(test->Subtract(7.0, 2.0), 5.0); Assert::AreEqual(test->Subtract(5.0, 2.0), 3.0); } TEST_METHOD(MultiplyTest) { Assert::AreEqual(test->Multiply(7.0, 2.0), 14.0); Assert::AreEqual(test->Multiply(5.0, 2.0), 10.0); } TEST_METHOD(DivideTest) { Assert::AreEqual(test->Divide(14.0, 2.0), 7.0); Assert::AreEqual(test->Divide(6.0, 3.0), 2.0); }
测试截图:
2、测试计算类对于各种参数的支持:
输入是有错误的,例如 “1 ++ 2”以及分母为零的情况,输入错误时,返回"NO"
result = "NO";
Assert::AreEqual(test->integer_cal("++", 9, 1), result);
result = "NO";
Assert::AreEqual(test->integer_cal("/", 9, 0), result);
测试截图:
怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?
那么如果真的计算结果是 “-1” 又怎么处理呢?
result ="NO"; Assert::AreEqual(test->fraction_cal("-", 2, 0, 1, 2),result); result = "-1"; Assert::AreEqual(test->fraction_cal("-", 1, 2, 3, 2), result);
如果计算结果错误的,返回值为“NO”,而计算结果为-1的返回值为“-1”
测试截图:
c. 小结与感受:
首先我觉得这次的单元测试很有必要,因为之前写的四则运算有许多不完善的地方,比如分数除法中分母为零的情况,通过测试我们找出异常并改善了代码,而且这次的这次的实验让我们的代码更模块化,条理更清晰。
d.体会
1.之前写的代码并没有分模块,加之是两个星期前的代码有些忘记自己写了什么,虽然有些注释,不过还是挺麻烦
2.第一次的实验只是考虑到最基本功能的实现,没有考虑到一些异常情况,如输入异常
3.实现代码的功能的模块化后提高了代码的可读性,以后若是再要修改也会方便许多。
PSP展示
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student(/hour) | Time (%)(/hour) |
· Planning | 计划 | 2 | 2 |
· Estimate | 估计这个任务需要多少时间 | 24 | 25 |
· Analysis | 需求分析 (包括学习新技术) | 10 | 12 |
· Coding Standard | 代码规范 | 3 | 4 |
· Design | 具体设计 | 2 | 2 |
· Coding | 具体编码 | 6 | 5 |
· Test | 测试(自我测试,修改代码,提交修改) | 2 | 1 |
Reporting | 报告 | 1 | 1 |
photo: