单元测试原理简析

我们稍微剖析单元测试的原理,从最简单的例子剖析它的机制。

假设我们有这样一个加法函数:

/**

 * 求两个数的和

 * @param $a int 输入值

 * @param $b int 输入值

 */

function add($a, $b)

{

    return $a + $b;

}

在上线之前,我们要测试该函数功能是否达到期望。

没有用单元测试前,我们会写类似这样的测试代码:

// 测试代码,如果输出3说明函数功能OK

echo add(1, 2);

// 为了更确切些,我们可能多写几个测试

echo add(0, 5);

echo add(100, -99);

有时候为了查看实际值和期望值,我们会把两个值都打印出来,

$expect = 3;

$result = add(1, 2);

if ($result != $expect) {

    echo '期望输出:’, $expect, ’,实际输出:', $result;

}

我们发现,这种判断方式其实可以重用。

于是,我们把它写成一个函数:

/**

 * 判断两个值是否相等

* 如果不相等,输出提示信息并中断执行

* 如果相等,不输出任何信息

 * @param $expect mixed 期望的值

 * @param $real mixed 实际的值

 */

function isEquals($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));

这就是单元测试的基本原理了

以上是 单元测试原理简析 的全部内容, 来源链接: utcz.com/z/326179.html

回到顶部