php单元测试phpunit入门实例教程


Posted in PHP onNovember 17, 2017

本文实例讲述了php单元测试phpunit。分享给大家供大家参考,具体如下:

这篇文章提供了一些phpunit官方教程没有提到的信息,帮助初学者快速了解php单元测试,在phpunit官网提供了详细的中文教程,可选多种格式下载

phpunit官网地址:https://phpunit.de/

何为单元测试:

指对软件中的基本单元进行测试,如函数、方法等,以检查其返回值或行为是否符合预期;实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文(或者说参数)和环境(比如打桩模拟一些对象)来运行,并监控其行为和返回值,为此我们就需要写出做这件事情的程序代码,这样的代码叫做测试用例,许多测试用例有机结合在一起形成一个整体的测试,又叫做测试套件,被测试的程序代码叫做生产代码。phpunit这个软件就是用来帮助我们写测试用例并进行测试的。

php的单元测试:phpunit

在其官网有详细教程,这里介绍一些补充内容。

首先要明白phpunit软件本身就是由php语言实现,其使用是通过命令行进行的,并不是通过浏览器访问

明白这一点很重要,许多新人被卡在这里。很基础也很简单,但似乎没怎么被提及

在官网下载后得到一个phar文件,关于phar归档文件的介绍可参见前面一篇文章PHP开发之归档格式phar文件概念与用法

请同时下载phpunit使用文档,按照里面的安装方法进行安装,之后在命令行输入以下命令:

phpunit --help

如果显示出了帮助信息即安装成功,在命令行当前目录下建立一个测试用例为yunke.php,内容如下:

<?php
use PHPUnit\Framework\TestCase;
class yunkeTest extends TestCase
{
  public function testPushAndPop()
  {
    $stack = [];
    $this->assertEquals(0, count($stack));
    array_push($stack, 'foo');
    $this->assertEquals('foo', $stack[count($stack) - 1]);
    $this->assertEquals(1, count($stack));
    $this->assertEquals('foo', array_pop($stack));
    $this->assertEquals(0, count($stack));
  }
}
?>

然后在命令行输入以下命令:

phpunit yunke

显示如下内容:

PHPUnit 5.7.12 by Sebastian Bergmann and contributors.
.                                  1 / 1 (100%)
Time: 159 ms, Memory: 7.00MB
OK (1 test, 5 assertions)

恭喜,你已经成功运行了一个单元测试,第一行是作者信息(Sebastian Bergmann这个家伙很喜欢署名啊)

第二行以一个句点开始,表示所有测试成功通过

你可能会疑惑,上面的php代码是怎么回事呢?

那就是一个测试用例,简单的测试了一个数组操作,进行单元测试一般通过以下四步:

1. 针对生产代码类 Class 的测试写在类 ClassTest中。
2. ClassTest(通常)继承自 PHPUnit\Framework\TestCase
3. 测试都是命名为 test* 的公用方法。也可以在方法的文档注释块(docblock)中使用 @test 标注将其标记为测试方法。
4. 在测试方法内,类似于 assertEquals()这样的断言方法用来对实际值与预期值的匹配做出断言判断。

这里你可能会有几个地方迷惑:

1、在注释块中使用的标注,php可以通过反射得到,程序可以利用得到的信息进行配置
2、上列中测试用例代码里面的TestCase类来自哪里?并没有被加载啊?
上文提到phpunit本身是用php语言写成的,打包成了phar供使用,phar是可执行的,执行时首先执行包里面的存根文件stub

你可以按照上文云客的另外一篇phar帖子介绍的方法提取还原phpunit.phar包,或者使用phpstorm这样的ide直接打开

在.phar/stub.php里你将看到存根代码,TestCase类就是在存根代码里面require的“phpunit yunke”这条命令行代码将首先运行phpunit脚本,从存根文件开始执行,然后由phpunit加载测试用例代码

可以看出程序并不是从测试用例脚本开始执行的,现在明白TestCase类哪里来的了吧

通过以上内容再配合官网文档,新手应该可以顺利入门了

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
PHP实现异步调用方法研究与分享
Oct 27 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
tp5框架无刷新分页实现方法分析
Sep 26 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 #PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 #PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 #PHP
PHP实现求解最长公共子串问题的方法
Nov 17 #PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 #PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 #PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 #PHP
You might like
example1.php
2006/10/09 PHP
PHP安全配置
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
生成sessionid和随机密码的例子
2006/10/09 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
AngularJS入门教程之多视图切换用法示例
2016/11/02 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
python中什么是面向对象
2020/06/11 Python
五一服装活动方案
2014/01/11 职场文书
消防安全管理制度
2014/02/01 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
大专毕业生求职信
2014/07/05 职场文书
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书
学生检讨书范文
2014/10/30 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
冰峪沟导游词
2015/02/09 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis