ThinkPHP5与单元测试PHPUnit使用详解


Posted in PHP onFebruary 23, 2020

thinkphp5.0 是 tp 发展路线第一个支持 composer 的。tp 有自己的载入机制,composer 也有自己的载入机制。

官方提供了 think-testing 组件可以通过 composer require topthink/think-testing 1.* 安装,但我对这个测试组件不是很满意,原因是它每个测试都是模拟成 http 请求。这也就意味着对于一些特定函数,还得封装到控制器中或者路由,该控制器还得控制它生产环境不能对外开放。thinkphp5.0 是 tp 发展路线第一个支持 composer 的。tp 有自己的载入机制,composer 也有自己的载入机制。

PHPUnit 是一个用PHP编程语言开发的开源软件,是一个单元测试框架。PHPUnit由Sebastian Bergmann创建,源于Kent Beck的SUnit,是xUnit家族的框架之一。

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

总之一句话,使用 phpunit 进行自动测试,会使你的代码更健壮,减少后期维护的成本,也是一种比较标准的规范,现如今流行的PHP框架都带了单元测试,如Laraval,Symfony,Yii2等,单元测试已经成了标配。

另外,单元测试用例是通过命令操控测试脚本的,而不是通过浏览器访问URL的。

项目内安装PHPUnit

使用 composer 方式安装 PHPUnit 项目根目录下执行下面这段代码

composer require phpunit/phpunit

自动下载适配版本  我下载的时4.8.36

ThinkPHP5与单元测试PHPUnit使用详解

ThinkPHP5与单元测试PHPUnit使用详解

将 F:\wamp\wamp\www\tp5\vendor\bin 添加加到 PATH 环境变量中(这样PHPunit全局生效)

ThinkPHP5与单元测试PHPUnit使用详解

PHPUnit简单用法

1、单个文件测试

根目录下创建目录tests

ThinkPHP5与单元测试PHPUnit使用详解

新建文件 FirstTest.php,编辑如下: 

<?php
/**
 * 1、引入autoload.php文件
 * 2、测试案例
 *
 *
 */
namespace App\tests;
require_once __DIR__ . '/../vendor/autoload.php';
 
 
use PHPUnit\Framework\TestCase;
 
 
class FirstTest extends TestCase
{
  public function testTure()
  {
    $stack = [];
    $this->assertEquals(0, count($stack));
  }
}

代码解释:

FirstTest为测试类FirstTest继承于 PHPUnit\Framework\TestCase测试方法testTure(),测试方法必须为public权限,一般以test开头,或者你也可以选择给其加注释@test来表在测试方法内,类似于 assertEquals() 这样的断言方法用来对实际值与预期值的匹配做出来以此判断方法是否正确

命令行执行:
tests目录下 执行  >phpunit FirstTest     命令 测试文件命名

ThinkPHP5与单元测试PHPUnit使用详解

测试项目内方法 

tp5项目下的控制器在  F:\wamp\wamp\www\tp5\application\index\controller 文件夹下 写一个简单的方法

ThinkPHP5与单元测试PHPUnit使用详解

在tests内写一个IndexTest.php

<?php
 
namespace App\tests;
require_once __DIR__ . '/../vendor/autoload.php';
 
use PHPUnit\Framework\TestCase;
use app\index\controller\Index;
 
 
class IndexTest extends TestCase
{
  public function testSum()
  {
    $obj = new Index;
    $this->assertEquals(6, $obj->index(2,3));
 
  }
 
}

执行后的结果  成功!

ThinkPHP5与单元测试PHPUnit使用详解

如果我在index.php,和IndexTest.php都故意写错 

ThinkPHP5与单元测试PHPUnit使用详解

ThinkPHP5与单元测试PHPUnit使用详解

返回结果  会有错误位置

ThinkPHP5与单元测试PHPUnit使用详解

其他用法

其他用法请参考官网:PHPUnit中国官网 

PHP 相关文章推荐
Zend Guard一些常见问题解答
Sep 11 PHP
php绝对路径与相对路径之间关系的的分析
Mar 03 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
php自定义错误处理用法实例
Mar 20 PHP
利用PHP抓取百度阅读的方法示例
Dec 18 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 #PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 #PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 #PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 #PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 #PHP
php7 图形用户界面GUI 开发示例
Feb 22 #PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 #PHP
You might like
建站常用13种PHP开源CMS比较
2009/08/23 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
在WordPress中使用wp-cron插件来设置定时任务
2015/12/10 PHP
PHP常用设计模式之委托设计模式
2016/02/13 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
python3实现ftp服务功能(客户端)
2017/03/24 Python
Python 处理数据的实例详解
2017/08/10 Python
简述 Python 的类和对象
2020/08/21 Python
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
不假外出检讨书
2014/01/27 职场文书
简历中的自我评价范文
2014/02/05 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书