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
Dec 14 PHP
在普通HTTP上安全地传输密码
Jul 21 PHP
php学习之简单计算器实现代码
Jun 09 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
php获取本周开始日期和结束日期的方法
Mar 09 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
Jul 03 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 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 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
php权重计算方法代码分享
2014/01/09 PHP
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
js常用DOM方法详解
2017/02/04 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
python抓取网页图片示例(python爬虫)
2014/04/27 Python
浅析Python中的多进程与多线程的使用
2015/04/07 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
物流专业求职计划书
2014/01/10 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
小学社会实践活动总结
2014/07/03 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
医生个人年度总结
2015/02/28 职场文书
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏