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 相关文章推荐
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
php 字符串函数收集
Mar 29 PHP
PHP 一个随机字符串生成代码
May 26 PHP
php输出表格的实现代码(修正版)
Dec 29 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
如何快速上手Vuex
2017/02/14 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python 读写文件的操作代码
2018/09/20 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
python的等深分箱实例
2019/11/22 Python
python中time tzset()函数实例用法
2021/02/18 Python
英国电子专家:maplin
2019/09/04 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
学子宴答谢词
2014/01/25 职场文书
大学生个人自荐信
2014/02/24 职场文书
21岁生日感言
2014/02/27 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
火箭队口号
2014/06/18 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
小平您好观后感
2015/06/09 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python