PHPUnit整合ThinkPHP的库TPUnit

简介: 项目地址:https://github.com/web3d/TPUnitThinkPHP PHPUnit框架集成,基于TP3.2,建议PHP 5.4以上环境。单元测试应该是提高PHP编码质量的解决之道,但应该没有多少PHP团队在用单元测试改善开发过程,更不用提TDD开发方法。

项目地址:https://github.com/web3d/TPUnit

ThinkPHP PHPUnit框架集成,基于TP3.2,建议PHP 5.4以上环境。

单元测试应该是提高PHP编码质量的解决之道,但应该没有多少PHP团队在用单元测试改善开发过程,更不用提TDD开发方法。

不可否认ThinkPHP框架在国内PHP圈子中的“至高”地位,所以才有这次整合尝试,同时也在团队中进行推行相关实践。

1. 初始配置

为了减少学习成本,建议使用像Netbeans这样的IDE来设定PHPUnit的基本环境。

通过Netbeans的操作界面,可以直接了解PHPUnit使用过程的一些核心概念。

  • 基于Netbeans的PHPUnit环境配置
  • git clone git@github.com:web3d/TPUnit.git 到ThinkPHP的Vendor目录下
  • 给ThinkPHP框架打补丁 将Think\Think类的start方法最后一行改为 !constant('NO_NEED_RUN_APP') && App::run();,同时 Think\App::init() 方法 !constant('NO_NEED_RUN_APP') && Dispatcher::dispatch();(注:由于创建测试文件的命令是在Cli环境执行,与TP的Cli模式处理冲突,临时解决方案)

2. 开始

将TPUnit中demo目录下的bootstrap.php文件复制到你的tests目录下。

在上一步的配置过程中,有一个“使用引导”的地方记得勾选并指定bootstrap.php文件所在目录。

由于ThinkPHP框架中坑爹的.class.php后缀名,导致NB 8.1以后版本虽然可以生成测试方法骨架,但文件名比较别扭,形式如ClsXYZ.classTest.php。

3. 支持的特性

3.1 基本的UnitTest

最经典的例子:

参看上面的参考配置文档中:基于Netbeans的PHPUnit环境配置

3.2 DB UnitTest

参看本项目demo目录 /demo/Application/Common/Model/UrlModelTest.php 文件。

DBUnit主要由四种断言构成,目前TPUnit已支持TP对这四种断言的支持:

  • 对表中数据行的数量作出断言
  • 对表的状态作出断言
  • 对查询的结果作出断言
  • 对多个表的状态作出断言

具体请查看https://github.com/web3d/TPUnit/blob/master/demo/Application/Common/Model/UrlModelTest.php

其中,{{%url}} 是从Yii2框架中引入的表名前缀替换方案,{{和}}是表名界定符,%是表名前缀占位符。

4. 修订日志:

  • [修复] 基于NB已经可以创建TP框架下的测试文件,但文件名与类名不对应,修复了测试类自动加载机制 [2016-05-20]

实践记录

目录
相关文章
|
数据挖掘 黑灰产治理
排队免单商城系统开发详细案例/方案项目/源码指南
排队免单商城系统开发设计是指开发一种商城系统,其中用户可以通过排队活动获得商品免单的机会。
|
7月前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
216 5
Java 并发编程——volatile 关键字解析
|
机器学习/深度学习 传感器 编解码
史上最全 | 基于深度学习的3D分割综述(RGB-D/点云/体素/多目)(上)
3D目标分割是计算机视觉中的一个基本且具有挑战性的问题,在自动驾驶、机器人、增强现实和医学图像分析等领域有着广泛的应用。它受到了计算机视觉、图形和机器学习社区的极大关注。传统上,3D分割是用人工设计的特征和工程方法进行的,这些方法精度较差,也无法推广到大规模数据上。在2D计算机视觉巨大成功的推动下,深度学习技术最近也成为3D分割任务的首选。近年来已涌现出大量相关工作,并且已经在不同的基准数据集上进行了评估。本文全面调研了基于深度学习的3D分割的最新进展,涵盖了150多篇论文。论文总结了最常用的范式,讨论了它们的优缺点,并分析了这些分割方法的对比结果。并在此基础上,提出了未来的研究方向。
史上最全 | 基于深度学习的3D分割综述(RGB-D/点云/体素/多目)(上)
|
6月前
|
机器学习/深度学习 存储 人工智能
《量子计算硬件:关键指标对人工智能应用性能的影响》
量子计算硬件的关键技术指标对人工智能性能至关重要。量子比特数量决定信息处理规模,更多量子比特可加速机器学习、提升模型精度;相干时间保障量子态稳定,延长其能提高计算可靠性;门保真度确保操作准确,高保真度增强计算精度与容错能力。其他如耦合强度、噪声水平等也协同作用,共同影响性能。优化这些指标将推动AI发展。
225 66
|
Java 应用服务中间件 调度
Tomcat 线程池
Tomcat 线程池
|
前端开发 Java Spring
SpringBoot2.6.x 整合swagger3.0 报错Failed to start bean ‘documentationPluginsBootstrapper‘
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
15473 3
SpringBoot2.6.x 整合swagger3.0 报错Failed to start bean ‘documentationPluginsBootstrapper‘
|
前端开发 JavaScript 定位技术
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
819 0
|
安全 Android开发 Kotlin
Android面试题之Kotlin协程并发问题和互斥锁
Kotlin的协程提供轻量级并发解决方案,如`kotlinx.coroutines`库。`Mutex`用于同步,确保单个协程访问共享资源。示例展示了`withLock()`、`lock()`、`unlock()`和`tryLock()`的用法,这些方法帮助在协程中实现线程安全,防止数据竞争。
169 1
|
敏捷开发 前端开发 JavaScript
深入理解自动化测试框架:以Selenium为例
【4月更文挑战第30天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快市场投放的关键步骤。本文聚焦于流行的自动化测试框架——Selenium,探讨其架构、核心组件以及如何有效地利用Selenium进行Web应用测试。通过分析真实案例,我们将揭示Selenium在实际项目中的应用优势与面临的挑战,并提出优化策略。文章的目的在于帮助测试工程师深入理解Selenium,提升其在复杂项目中的运用效率。
|
供应链 算法 数据挖掘
一文看懂:销售数据分析怎么做?
今天跟大家分享数据分析里最高频的一个工作:销售分析。不管是实打实挣钱的公司,还是指望上市圈钱的公司,销售业绩都是领导们最看重的指标。 很多人从事数据分析工作,也是从基础的“销售统计专员”做起的。今天就简单分享下,销售分析该如何做。
898 0
一文看懂:销售数据分析怎么做?