单元测试原理简析
我们稍微剖析单元测试的原理,从最简单的例子剖析它的机制。
假设我们有这样一个加法函数:
/** *求两个数的和 *@param$aint输入值 *@param$bint输入值 */ functionadd($a,$b) { return$a+$b; }
在上线之前,我们要测试该函数功能是否达到期望。
没有用单元测试前,我们会写类似这样的测试代码:
//测试代码,如果输出3说明函数功能OK echoadd(1,2); //为了更确切些,我们可能多写几个测试 echoadd(0,5); echoadd(100,-99);
有时候为了查看实际值和期望值,我们会把两个值都打印出来,
$expect=3; $result=add(1,2); if($result!=$expect){ echo'期望输出:’,$expect,’,实际输出:',$result; }
我们发现,这种判断方式其实可以重用。
于是,我们把它写成一个函数:
/** *判断两个值是否相等 *如果不相等,输出提示信息并中断执行 *如果相等,不输出任何信息 *@param$expectmixed期望的值 *@param$realmixed实际的值 */ functionisEquals($expect,$real) { if($expect!=$real){ echo'期望输出:',$expect,',实际输出:',$real; exit(); } }
这样,我们在使用的时候,就不用每次都写if和echo语句,变成:
isEquals(3,add(1,2)); isEquals(5,add(0,5)); isEquals(1,add(100,-99));
这就是单元测试的原理。
判断一个方法的输出是否为预期结果,如果是,则继续执行其他判断;如果不是,输出预期值和实际值。
PHPUnit里面有大量这种判断方法,并起了个专用名词:断言(英文assert)。
断言其实就是判断,判断某个方法的输出是否等于(或者不等于)期望的值。
如果是,则不输出任何信息;
如果不是,说明给定方法没有实现预期的功能,PHPUnit就会输出提示信息。
PHPUnit中的assertEquals()就和我们上面实现的isEquals()一样,判断两个值是否相等。
在PHPUnit这样用:
assertEquals(3,add(1,2));
这就是单元测试的基本原理了