ThinkPHP5与单元测试PHPUnit使用详解
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
将 F:wampwampwwwtp5vendorbin添加加到 PATH 环境变量中(这样PHPunit全局生效)
PHPUnit简单用法
1、单个文件测试
根目录下创建目录tests
新建文件FirstTest.php,编辑如下:
<?php
/**
* 1、引入autoload.php文件
* 2、测试案例
*
*
*/
namespace Apptests;
require_once __DIR__ . '/../vendor/autoload.php';
use PHPUnitFrameworkTestCase;
class FirstTest extends TestCase
{
public function testTure()
{
$stack = [];
$this- assertEquals(0, count($stack));
}
}
代码解释:
FirstTest为测试类FirstTest继承于PHPUnitFrameworkTestCase测试方法testTure(),测试方法必须为public权限,一般以test开头,或者你也可以选择给其加注释@test来表在测试方法内,类似于assertEquals()这样的断言方法用来对实际值与预期值的匹配做出来以此判断方法是否正确
命令行执行: tests目录下 执行 phpunit FirstTest 命令 测试文件命名
测试项目内方法
tp5项目下的控制器在 F:wampwampwwwtp5applicationindexcontroller 文件夹下 写一个简单的方法
在tests内写一个IndexTest.php
<?php
namespace Apptests;
require_once __DIR__ . '/../vendor/autoload.php';
use PHPUnitFrameworkTestCase;
use appindexcontrollerIndex;
class IndexTest extends TestCase
{
public function testSum()
{
$obj = new Index;
$this- assertEquals(6, $obj- index(2,3));
}
}
执行后的结果 成功!
如果我在index.php,和IndexTest.php都故意写错
返回结果 会有错误位置
其他用法
其他用法请参考官网:PHPUnit中国官网
- JAVA-FTP批量大文件传输
- 独家 | 一文读懂TensorFlow(附代码、学习资料)
- 解决openssh漏洞,升级openssh版本
- 解决NTPD漏洞,升级Ntpd版本
- 独家 | 手把手教TensorFlow(附代码)
- HBase Region自动切分细节
- eclipse搭建ssh后台
- 解决mysql漏洞 Oracle MySQL Server远程安全漏洞(CVE-2015-0411)
- im4java包处理图片
- centOS7 mini配置linux服务器(五) 安装和配置tomcat和mysql
- RedisPool操作Redis,工具类实例
- centOS7 mini配置linux服务器(四) 配置jdk
- 老司机教你“飙”EventBus3
- Android listView异步下载和convertView复用产生的错位问题
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 拿好了!Linux 运维必备的 13 款实用工具!
- 自制CA证书设置ssl证书
- MySQL数据迁移TcaplusDB实践
- TKE之初识容器探测器
- 2.3.2 JDK动态代理 -《SSM深入解析与项目实战》
- mac设备安装nginx注意事项
- 《研发运营安全白皮书(2020年)》深度解读:全生命周期安全体系将是未来趋势
- 深度学习故障诊断:残差收缩网络 Residual Shrinkage Networks
- Java基于SSM的个人博客系统(源码 包含前后台)
- 聊聊RespServer
- Spring Boot系列之读取配置
- Flutter中State深入分析理解
- Xenomai3.1+ubuntu 18.04/16.04
- 聊聊RespCommand
- Python爬取网站图片