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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
PHP函数常用用法小结
Feb 08 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
2014过年倒计时示例
Jan 31 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
php简单分页类实现方法
Feb 26 PHP
PHP代码优化技巧小结
Sep 29 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 PHP
PHP策略模式写法
Apr 01 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 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
Python多线程多进程实例对比解析
2020/03/12 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
.net工程师笔试题
2012/06/09 面试题
七匹狼男装广告词
2014/03/21 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
合伙经营协议书范本
2014/09/13 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
安全员岗位职责
2015/02/10 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
孝女彩金观后感
2015/06/10 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书