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数据流应用的简单例子
Jun 01 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
关于php循环跳出的问题
Jul 01 PHP
php广告加载类用法实例
Sep 23 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
php常用字符函数实例小结
Dec 29 PHP
php json转换相关知识(小结)
Dec 21 PHP
Laravel开启跨域请求的方法
Oct 13 PHP
PHP代码加密的方法总结
Mar 13 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 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
一个分页的论坛
2006/10/09 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
Ajax的优点和缺点
2014/11/21 面试题
项目开发计划书
2014/01/09 职场文书
校园安全检查制度
2014/02/03 职场文书
食品安全工作方案
2014/05/07 职场文书
求职自荐信怎么写
2015/03/04 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书