代码改变世界

结对编程2——单元测试(40,60,61)

2017-03-29 14:29  olivia-sun  阅读(234)  评论(0编辑  收藏  举报

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)必要的注释

代码中的注释不仅提高了代码的可读性,同时也可以提高自己检查代码错误的速度。

团队照片: