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 相关文章推荐
解决GD中文乱码问题
Feb 14 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
php实现word转html的方法
Jan 22 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 PHP
tp5.1 框架路由操作-URL生成实例分析
May 26 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
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
jquery.validate使用详解
2016/06/02 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
js面向对象编程总结
2017/02/16 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
vue实现购物车小案例
2019/09/27 Javascript
python去除所有html标签的方法
2015/05/05 Python
python获取代码运行时间的实例代码
2018/06/11 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
简单说说tomcat的配置
2013/05/28 面试题
生产现场工艺工程师岗位职责
2013/11/28 职场文书
高二物理教学反思
2014/02/08 职场文书
银行委托书范本
2014/04/04 职场文书
租车协议书范本
2014/04/22 职场文书
管理工程专业求职信
2014/08/10 职场文书
机动车交通事故协议书
2015/01/29 职场文书
民事申诉状范本
2015/05/20 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python