项目地址: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]

实践记录

PHPUnit整合ThinkPHP的库TPUnit的更多相关文章

  1. redmine整合GIT版本库

    redmine整合GIT版本库   服务器的环境: Ubuntu 11.10 64位 Redmine 1.4.5.stable.10943 git version 1.7.5.4 + gitolite ...

  2. Ucenter整合Thinkphp 双向同步登录退出

    1.整合初步工作: 1,安装Ucenter,完成后添加应用,填写要对接的网站地址 2,api , uc_client目录放置对接项目的根目录 3,通信对接,新建Ucenter组,confi文件填写在u ...

  3. 整合大量开源库项目(八)能够载入Gif动画的GifImageView

    转载请注明出处王亟亟的大牛之路 上周大多数时间都是依据兴起,想到什么做什么写了几个自己定义控件,把Soyi丢在那没怎么动,今天就把写的东西整合进来,顺便把SOyi"个人研发的结构理一下&qu ...

  4. Spring Boot中整合Sharding-JDBC单库分表示例

    本文是Sharding-JDBC采用Spring Boot Starter方式配置第二篇,第一篇是读写分离讲解,请参考:<Spring Boot中整合Sharding-JDBC读写分离示例> ...

  5. thinkphp 标签库

    内置的模板引擎除了支持普通变量的输出之外,更强大的地方在于标签库功能. 标签库类似于Java的Struts中的JSP标签库,每一个标签库是一个独立的标签库文件,标签库中的每一个标签完成某个功能,采用X ...

  6. 用 React 整合 LogEntries JavaScript 库

    [编者按]本文作者为 David Posin,主要介绍 React 与 LogEntries 间的相互操作.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 众所周知,React.js已经被证 ...

  7. CodeIgniter(3.1.4)框架中整合ThinkPHP验证码

    下载源码包: https://github.com/top-think/think-captcha 字体库: 源文件路径: //代码中字体路径,背景路径已经修改. <?php class Vco ...

  8. 整合大量开源库项目(五)跳动的TextView JumpingBeans,良好体验的滚动条ConvenientBanner

    转载请注明出处:王亟亟的大牛之路 时间过得非常快,这一系列已经写了第五篇了(感觉还要写好久).今天又引入了2个非常好用的库JumpingBeans,ConvenientBanner.首先.先看一下效果 ...

  9. thinkphp 标签库驱动

    任何一个模板引擎的功能都不可能是为你量身定制的,具有一个良好的可扩展机制也是模板引擎的另外一个考量,Smarty采用的是插件方法来实现扩展,Think\Template由于采用了标签库技术,比Smar ...

随机推荐

  1. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  2. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  3. HIVE教程

    完整PDF下载:<HIVE简明教程> 前言 Hive是对于数据仓库进行管理和分析的工具.但是不要被“数据仓库”这个词所吓倒,数据仓库是很复杂的东西,但是如果你会SQL,就会发现Hive是那 ...

  4. PAT甲级 1001. A+B Format (20)

    题目原文: Calculate a + b and output the sum in standard format -- that is, the digits must be separated ...

  5. webpack学习总结

    前言 在还未接触webpack,就有几个疑问: 1. webpack本质上是什么? 2. 跟异步模块加载有关系吗? 3. 可否生成多个文件,一定是一个? 4. 被引用的文件有其他异步加载模块怎么办? ...

  6. git命令行操作

    从本地上传代码到仓库(假设已经建好仓库): 1.初始化: git init 2.将所有文件加入缓存区: git add * 3.提交当前工作空间的修改内容: git commit -m 'commit ...

  7. Rxjava cold/hot Observable

    create Observable分为cold以及hot两种,cold主要是静态的,每次subscribe都是从头开始互不干扰,而hot的在同一时刻获得的值是一致的 cold Observable 使 ...

  8. Java回调方法详解

    回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...

  9. 将自己打代码添加到cocoapods

    1,Github 上创建新站点 2, 从gitHub上 clone 一份,将源码拷贝到该目录下提交3,开源库发布之后,需要打上tag git tag 0.0.1 git push --tags git ...

  10. Atitit 图像处理的心得与疑惑 attilax总结

    Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...