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 相关文章推荐
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
php whois查询API制作方法
Jun 23 PHP
php标签云的实现代码
Oct 10 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
php单态设计模式(单例模式)实例
Nov 18 PHP
php计算整个目录大小的方法
Jun 01 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
php生成mysql的数据字典
Jul 07 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
Oct 17 PHP
PHP实现文件上传与下载
Aug 28 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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
简单的编程0基础下Python入门指引
2015/04/01 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
对python中UDP,socket的使用详解
2019/08/22 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python super用法及原理详解
2020/01/20 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
写给妈妈的道歉信
2014/01/11 职场文书
大学专科求职信
2014/07/02 职场文书
自我检讨报告
2015/01/28 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript