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做的端口嗅探器--可以指定网站和端口
Oct 09 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
May 16 PHP
基于PHP异步执行的常用方式详解
Jun 03 PHP
thinkphp验证码显示不出来的解决方法
Mar 29 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
yii2超好用的日期组件和时间组件
May 05 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 PHP
laravel框架上传图片实现实时预览功能
Oct 14 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
PHP 工厂模式使用方法
2010/05/18 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
实现js保留小数点后N位的代码
2014/11/13 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python自定义解析简单xml格式文件的方法
2015/05/11 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
python爬取个性签名的方法
2018/06/17 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
python yield关键词案例测试
2019/10/15 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
消防安全承诺书
2014/05/22 职场文书
测控技术自荐信
2014/06/05 职场文书
五四青年节的活动方案
2014/08/20 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
Django实现聊天机器人
2021/05/31 Python