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成都治疗白癜风的医院治白癜风最好的方法
|