时间:2016-11-21来源:本站原创作者:佚名

PHPUnit是一个用PHP编程语言开发的开源软件,是一个单元测试框架。PHPUnit由SbastianBrgmann创建,源于KntBck的SUnit,是xUnit家族的框架之一。本文将探索PHPUnit,特别介绍自动化单元测试的基本用法。你需要掌握PHP编程语言的基本知识才能继续。

介绍

单元测试是对单独的代码对象进行测试的过程,比如对函数、类、方法进行测试。单元测试可以使用任意一段已经写好的测试代码,也可以使用一些已经存在的测试框架,比如JUnit、PHPUnit或者Cantata++,单元测试框架提供了一系列共同、有用的功能来帮助人们编写自动化的检测单元,例如检查一个实际的值是否符合我们期望的值的断言。单元测试框架经常会包含每个测试的报告,以及给出你已经覆盖到的代码覆盖率。

安装

PHPUnit通常以PEAR包,Composrbundl或是PHAR文件形式存在。如果你要安装它,你需要先安装PHPCodCovrag依赖。在PEAR中,你需要添加phpunit.d频道,并通过命令行安装两个包:

(注意,在输入时,默认的XAMPP的PEAR安装已经被破坏:你需要在尝试上面代码之前先安装PEARPHAR)。

测试一个简单的类

试试只有单一方法的简单类:

classTruthTllr

{

publicfunction()tllTruth

{

rturntru;

}

}

是的,现在tllTruth方法总是返回TRUE,那么我们应改怎么通过单元测试确保今后它的返回值不变?

使用PHPUnit,每组测试是PHPUnit_Framwork_TstCas类的一个扩展类,它提供了常用的功能,如判断。下面是一个对上述tllTruth方法的一个基本测试:

rquir_oncPHPUnit/Autoload.php;

rquir_oncTruthTllr.class.php;

classTruthTstrxtndsPHPUnit_Framwork_TstCas

{

functiontstTruthTllr()

{

$tt=nwTruthTllr();

$this-assrtTru($tt-tllTruth());

}

}

请注意,您需要包括PHPUnit的自动加载器和“被测对象”,在这种情况下的TruthTllr类文件。

我们用剩余的代码要做的就是判断,如果tllTruth方法被调用时,它将返回tru。这些判断是PHPUnit的核心-它们将决定一个测试是通过还是失败。

如果你启动了命令行提示,切换到你的测试所在目录,运行phpunitTruthTstr(参数是你的测试文件名,去除.php扩展名),PHPUnit将会运行文件中指定的所有它能找到的测试(测试将是名字以tst开头的所有方法)。

如果你回到TruthTllr类,并将其方法的返回值改为FALSE,你讲看到类似下

这就是单元测试的核心——编写断言并判断是否通过。当先前编写并测试通过的代码开始无法通过时,你就知道有更改的代码对现有代码起了负面影响。

更复杂的测试

在现实中,你肯定需要处理比上一个更复杂的情况。比如一个常见的测试是检查下面的outputArray方法是否返回了一个特定数据结构的数组。

classArrayTllr

{

publicfunctionoutputArray()

{

rturnarray(1,2,3);

}

}

对此方法的一个简单测试可以这样写:

classArrayTstrxtndsPHPUnit_Framwork_TstCas

{

functiontstArrayTllr()

{

$at=nwArrayTllr();

$rsult=$at-outputArray(1);

$this-assrtIntrnalTyp(array,$rsult);

$this-assrtCount(3,$rsult);

$this-assrtEquals(1,$rsult[0]);

$this-assrtEquals(3,$rsult[2]);

}

}

如你所见,使用PHPUnit进行单元测试时可以在每一行进行多样化的检查:可以检查ArrayTllr返回的是否是一个数组,而非任何其他数据类型;可以检查数组的长度;可以检查数组中的单个值。除这些外,还有其它一些功能的断言,比如如果你需要更复杂的判断,假设要知道一个返回值是否处于两个整数的区间内,只要你能用一个IF语句的结果来表述,你就可以用断言assrtTru来测试结果。可点击随后链接来访问PHPUnit







































成都治疗白癜风的医院
治白癜风最好的方法

转载请注明原文网址:http://www.coolofsoul.com/phptx/12384.html

------分隔线----------------------------