coding地址:https://coding.net/u/augur_g/p/homework-2/git/tree/master
组员:201421123040 孙佳萱
201421123060 谷天鹏
201421123061 常昊
需求分析
本次程序将原有四则运算器的计算模块单独抽离出来,写成一个独立的类.
然后再写一个测试模块对这个独立的计算模块进行全方位的测试
测试模块使用的是php下的phpunit单元测试,ide为phpstorm
单元测试框架
计算模块
计算模块剥离:
<?php class Quiz { function simplify($mol, $den) { $Mol = $mol; $Den = $den; if($den == 0){ return "分母不为0"; } while ($den) { $temp = $mol % $den; $mol = $den; $den = $temp; } $temp = $mol; if ($temp != 0) { $mol = $Mol / $temp; $den = $Den / $temp; if ($den == 1) { return $mol; } else { return "$mol/$den"; } } } function getQuiz($Fra_a,$Fra_b,$Fra_c,$Fra_d,$operator) { $answer = 0; switch ($operator) { case '+': $mol = ($Fra_a * $Fra_d) + ($Fra_c * $Fra_b); $den = $Fra_b * $Fra_d; $answer = $this->simplify($mol, $den); break; case '-': $mol = ($Fra_a * $Fra_d) - ($Fra_c * $Fra_b); $den = $Fra_b * $Fra_d; $answer = $this->simplify($mol, $den); break; case '×': $mol = $Fra_a * $Fra_c; $den = $Fra_b * $Fra_d; $answer = $this->simplify($mol, $den); break; case '÷': $mol = $Fra_a * $Fra_d; $den = $Fra_b * $Fra_c; $answer = $this->simplify($mol, $den); break; default: $answer="error"; echo $answer; break; } return $answer; } }
测试如下功能
1.分数加减乘除运算
$Test = new Quiz(); $this->assertEquals('104/235',$Test->getQuiz(2,5,8,188,'+')); $this->assertEquals('1',$Test->getQuiz(3,6,3,6,'+')); $this->assertEquals('1/2',$Test->getQuiz(6,6,3,6,'-')); $this->assertEquals('21/4',$Test->getQuiz(9,6,7,2,'×')); $this->assertEquals('40/21',$Test->getQuiz(8,3,7,5,'÷'));
2.分数化简运算
$this->assertEquals('21/4',$Test->simplify(42,8));
3.除0异常处理以及符号错误处理
$this->assertEquals('error',$Test->getQuiz(3,6,3,6,'?')); $this->assertEquals('分母不为0',$Test->simplify(42,0));
测试结果输出
这里断言故意写错,输出结果如下
正确输出
顺利通过功能的测试。
代码覆盖率查看
php下通过phpunit 与 Xdebug扩展完成代码覆盖率的查看以及报告生成
ide内部查看代码覆盖率
通过命令行生成html代码覆盖率报告
phpunit --coverage-html ./coverage ./QuizTest.class.php
PSP自测(单位为百分比)
个人小结:
第一次接触单元测试,感觉还是很有意义的,单元测试可以对代码进行检查,找到哪些代码是错误的,有助于更好的修正代码。但是对这一方面还是有些陌生,这次的作业和队友一起学习了很多,很有收获,之后会更进一步的学习。
体会:
(1)良好的设计
良好的设计对项目来说是不可或缺的,在进行程序设计之前,先想好设计的内容、功能以及可能出现的问题,在接下来的编程工作中会减少很多工作量。
(2)编码规范
编码的规范性在结对编程中显得尤为重要,规范的代码不仅可以方便队友阅读,还可以在一段时间后重温代码时帮助我们更快速的理解,所以,一定要在编写代码前规范好代码的书写。
(3)必要的注释
代码中的注释不仅提高了代码的可读性,同时也可以提高自己检查代码错误的速度。
团队照片: