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简单封装了一些常用JS操作
Feb 25 PHP
mysql时区问题
Mar 26 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
Nov 12 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
php 伪造ip以及url来路信息方法汇总
Nov 25 PHP
php去除html标记的原生函数详解
Jan 27 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 PHP
Laravel框架实现抢红包功能示例
Oct 31 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 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
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
php中print(),print_r(),echo()的区别详解
2014/12/01 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
js字符串截取函数slice、substring和substr的比较
2016/05/17 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python实现五子棋游戏
2019/06/18 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
军训心得体会
2013/12/31 职场文书
快餐店的创业计划书范文
2014/01/29 职场文书
设计顾问服务计划书
2014/05/04 职场文书
端午节演讲稿
2014/05/23 职场文书
品质口号大全
2014/06/17 职场文书
成本会计实训报告
2014/11/05 职场文书
搞笑婚前保证书
2015/02/28 职场文书
护士自我推荐信范文
2015/03/24 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers