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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
May 04 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
php rsa加密解密使用详解
Jan 14 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
PHP会员找回密码功能的简单实现
Sep 05 PHP
基于php判断客户端类型
Oct 14 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
php创建类并调用的实例方法
Sep 25 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缩略图生成程式(需要GD库支持)
2007/03/06 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
Vuex的各个模块封装的实现
2020/06/05 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
python如何实现内容写在图片上
2018/03/23 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
python实现拼接图片
2020/03/23 Python
pycharm永久激活超详细教程
2020/10/29 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
校园自助餐厅的创业计划书
2013/12/26 职场文书
季度思想汇报
2014/01/01 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
中学生寄语大全
2014/04/03 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
《鲸》教学反思
2016/02/23 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python
vue3获取当前路由地址
2022/02/18 Vue.js