本文主要介绍了phpunit测试框架PHPUnit的使用方法,并结合实例详细分析了单元测试框架PHPUnit的原理、安装和使用。有需要的可以参考一下。
本文展示了PHPUnit测试框架PHPUnit的用法。分享给你,供你参考,如下:
以前我在学习IOS开发的时候写过一篇关于Objective-C的单元测试的文章,IOS开发学习的单元测试。今天,我将总结如何在PHP中使用单元测试。
一、前言
在本文中,我们使用composer的依赖包管理工具来安装和管理phpunit包。composer的官方地址是https://getcomposer.org/,所以我们可以根据提示在全球范围内安装它。另外,我们还会使用一个非常易用的Monolog日志组件来记录日志,方便我们查看。
在根目录下建立coomposer.json的配置文件,输入以下内容:
{
自动加载':{
类别映射':[。/'
]
}
}
上面的意思是加载根目录下的所有类文件。在命令行上执行composer install后,根目录下会生成一个厂商文件夹,以后我们通过composer安装的任何第三方代码都会在这里生成。
二、为什么要单元测试?
每当您想在打印语句或调试表达式中输入一些内容时,就用测试来代替它。马丁福勒
PHPUnit是用PHP编程语言开发的开源软件,是一个单元测试框架。PHPUnit由塞巴斯蒂安博格曼创立,起源于肯特贝克的苏尼特。是xUnit家族的框架之一。
单元测试是测试单个代码对象的过程,比如函数、类和方法。单元测试可以使用任何编写的测试代码,或者一些现有的测试框架,比如JUnit、PHPUnit或者Cantata。单元测试框架提供了一系列常见且有用的功能来帮助人们编写自动化测试单元,例如检查实际值是否符合我们预期值的断言。单元测试框架通常包含每个测试的报告,并给出您已经覆盖的代码覆盖率。
总之,使用PHP Punit进行自动测试,会让你的代码更加健壮,减少后期维护的成本。也是比较标准的规范。现在流行的PHP框架都有单元测试,比如Laraval,Symfony,Yii2等。单元测试已经成为标准。
此外,单元测试用例通过命令操纵测试脚本,而不是通过浏览器访问URL。
三、安装PHPUnit
使用composer安装PHPUnit。请参见此处了解其他安装方法。
作曲家要求-开发phpunit/phpunit ^6.2
安装Monolog log包,用于记录phpunit测试。
作曲者需要独白/独白
安装完成后,我们可以看到coomposer.json文件已经有了这两个扩展包:
要求':{
独白:'^1.23',
},
require-dev ':
' phpunit/phpunit': '^6.2'
},
四、PHPUnit简单用法
1、单个文件测试
创建目录测试,创建新的文件StackTest.php,并按如下方式编辑它:
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
/**
* 1.composer安装Monolog log扩展和phpunit单元测试扩展包。
* 2、autoload.php文件的引进
* 3.测试案例
*
*
*/
命名空间App \ tests
要求_一次__目录_ _。'/./vendor/autoload . PHP ';
define('ROOT_PATH ',目录名(__DIR__)。'/');
使用Monolog \ Logger
使用Monolog \ Handler \ StreamHandler
使用PHPUnit \ Framework \ TestCase
类堆栈测试扩展测试用例
{
公共函数testPushAndPop()
{
$ stack=[];
$this-assertEquals(0,count($ stack));
array_push($stack,' foo ');
//添加日志文件。如果没有安装monolog,关于monolog的代码可以注释掉。
$this-Log()-error('hello ',$ stack);
$this-assertEquals('foo ',$ stack[count($ stack)-1]);
$this-assertEquals(1,count($ stack));
$this-assertEquals('foo ',array _ pop($ stack));
$this-assertEquals(0,count($ stack));
}
公共函数日志()
{
//创建日志通道
$log=新记录器(' Tester ');
$ log-pushHandler(新的流处理程序(ROOT _ PATH .storage/logs/app.log ',Logger:WARNING));
$ log-Error(' Error ');
返回$ log
}
}
代码解释:
堆栈测试为测试类
堆栈测试继承于PHPUnit \框架\测试用例
测试方法testPushAndPop(),测试方法必须为公众的权限,一般以试验开头,或者你也可以选择给其加注释@测试来表
在测试方法内,类似于assertEquals()这样的断言方法用来对实际值与预期值的匹配做出断言。
命令行执行:
phpunit命令测试文件命名
框架#。/vendor/bin/phpunit测试/堆栈测试。服务器端编程语言(Professional Hypertext Preprocessor的缩写)
//或者可以省略文件后缀名
//./vendor/bin/phpunit测试/堆栈测试
执行结果:
框架#。/vendor/bin/phpunit测试/堆栈测试。服务器端编程语言(Professional Hypertext Preprocessor的缩写)
塞巴斯蒂安博格曼和贡献者。1/1 (100%)
时间:56毫秒,内存:4.00兆字节
正常(1个测试,5个断言)
我们可以在app.log文件中查看我们打印的日志信息。
2、类文件引入
Calculator.php
?服务器端编程语言(专业超文本预处理器的缩写)
班级计算器
{
公共函数和(甲,乙美元)
{
返回$ a $ b;
}
}
?
单元测试类:
CalculatorTest.php
?服务器端编程语言(专业超文本预处理器的缩写)
命名空间应用程序\测试
要求_一次__目录_ _。'/./供应商/自动加载。PHP ';
需要“计算器。PHP”;
使用PHPUnit \框架\测试用例
类计算器测试扩展了测试用例
{
公共函数testSum()
{
$obj=新计算器;
$this-assertEquals(0,$obj-sum(0,0));
}
}
命令执行:/vendor/bin/phpunit测试/计算器测试
执行结果:
塞巴斯蒂安博格曼和贡献者。
F 1/1 (100%)
时间:117毫秒,内存:4.00兆字节
有一个故障:
如果我们把这里的断言故意写错,$this-assertEquals(1,$obj-sum(0,0));
看执行结果:
塞巴斯蒂安博格曼和贡献者。
F 1/1 (100%)
时间:117毫秒,内存:4.00兆字节
有一个故障:
1)应用程序\测试\计算器测试:测试总和
未能断言0与预期的一匹配。
/应用程序/XAMPP/xamppfiles/htdocs/web/framework/tests/calculator test。PHP:22
失败!
测试:1,断言:1,失败:1。
会直接报出方法错误信息及行号,有助于我们快速找出病菌
3、高级用法
你是否已经厌烦了在每一个测试方法命名前面加一个测试,是否因为只是调用的参数不同,却要写多个测试用例而纠结?我最喜欢的高级功能,现在隆重推荐给你,叫做框架生成器。
Calculator.php
?服务器端编程语言(专业超文本预处理器的缩写)
班级计算器
{
公共函数和(甲,乙美元)
{
返回$ a $ b;
}
}
?
命令行启动测试用例,使用关键字-骷髅。/vendor/bin/phpunit-skeleton Calculator.php
执行结果:
塞巴斯蒂安博格曼和贡献者。
给CalculatorTest.php写了计算器的测试类框架。
是不是很简单,因为没有测试数据,所以这里加测试数据,然后重新执行上边的命令
?服务器端编程语言(专业超文本预处理器的缩写)
班级计算器
{
/**
* @assert (0,0)==0
* @assert (0,1)==1
* @assert (1,0)==1
* @assert (1,1)==2
*/
公共函数和(甲,乙美元)
{
返回$ a $ b;
}
}
?
原始类中的每个方法都进行@断言注解的检测。这些被转变为测试代码,像这样
/**
*由@assert (0,0)==0生成。
*/
公共函数testSum() {
$obj=新计算器;
$this-assertEquals(0,$obj-sum(0,0));
}
执行结果:/vendor/bin/phpunit测试/计算器测试
塞巴斯蒂安博格曼和贡献者。
.
时间:0秒
正常(4次测试)
更多关于服务器端编程语言(专业超文本预处理器的缩写)相关内容感兴趣的读者可查看本站专题: 《PHP错误与异常处理方法总结》 、 《php字符串(string)用法总结》 、 《PHP数组(Array)操作技巧大全》 、 《PHP运算与运算符用法总结》 、 《PHP网络编程技巧总结》 、 《PHP基本语法入门教程》 、 《php面向对象程序设计入门教程》 及《php优秀开发框架总结》
希望本文所述对大家服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。