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 相关文章推荐
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
php实现的zip文件内容比较类
Sep 24 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
帝国cms常用标签汇总
Jul 06 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
php利用gd库为图片添加水印
Nov 09 PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
详解Vue-cli代理解决跨域问题
2017/09/27 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
浅谈React组件之性能优化
2018/03/02 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
Python实现的数据结构与算法之链表详解
2015/04/22 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
浅述python中深浅拷贝原理
2018/09/18 Python
Python对切片命名的实现方法
2018/10/16 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
个人自我鉴定怎么写
2013/10/28 职场文书
市场拓展计划书
2014/05/03 职场文书
关于安全的标语
2014/06/10 职场文书
自我查摆剖析材料
2014/10/11 职场文书
教师年终个人总结
2015/02/11 职场文书
党员转正大会主持词
2015/07/02 职场文书
MySQL中order by的执行过程
2022/06/05 MySQL