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 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
模仿OSO的论坛(三)
Oct 09 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 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
easyui的tabs update正确用法分享
2014/03/21 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
React Router基础使用
2017/01/17 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
vue实现简易计算器功能
2021/01/20 Vue.js
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
同学会邀请书大全
2014/01/12 职场文书
英语感恩演讲稿
2014/01/14 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
个人先进材料范文
2014/12/30 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
Python集合的基础操作
2021/11/01 Python
Python中第三方库Faker的使用详解
2022/04/02 Python
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL