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脚本的10个技巧(3)
Oct 09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
php面向对象全攻略 (八)重载新的方法
Sep 30 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
LotusPhp笔记之:Logger组件的使用方法
May 06 PHP
php错误级别的设置方法
Jun 17 PHP
smarty获得当前url的方法分享
Feb 14 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 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调用三种数据库的方法(1)
2006/10/09 PHP
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
2016/11/23 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
Python处理CSV与List的转换方法
2018/04/19 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
学期自我鉴定范文
2013/10/01 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
如何通过一篇文章了解Python中的生成器
2022/04/02 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS