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项目的方法
Oct 09 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
django中的ajax组件教程详解
Oct 18 PHP
php连接mysql数据库最简单的实现方法
Sep 24 PHP
解决Laravel使用验证时跳转到首页的问题
Nov 17 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实现批量下载百度云盘文件例子分享
2014/04/10 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
2017/06/30 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
优秀毕业生推荐信范文
2014/03/07 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android
Java实现房屋出租系统详解
2021/10/05 Java/Android
python基础之类属性和实例属性
2021/10/24 Python
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫