想试一下单元测试很久了,但是一直没有合适的项目,而且中文网络上的PHPUnit教程要么太旧,要么太乱,所以总也没学会。最近准备把手头的项目重构一下,决定开始使用PHPUnit做单元测试,先照着PHPUnit的官网做了一下Tutorial,虽然已经很简单了,仍然被卡住几次,所以写篇文章记录一下。因为对PHP的包管理系统不熟悉,这篇文章会从安装开始。

1.安装

PHPUnit如果使用PHAR安装的话很简单。Phar归档就像Java的Jar,可以直接被PHP解释器执行。在*nix系统下,可以执行下面三条命令:

➜ wget https://phar.phpunit.de/phpunit.phar

➜ chmod +x phpunit.phar

➜ sudo mv phpunit.phar /usr/local/bin/phpunit

考虑到这次的重构会引入比较多类库,我选择了Composer做依赖管理。我在Windows上试过PhpStorm里的Composer,总是失败,感觉是网络不好的原因。这次在Ubuntu下安装很顺利,全局安装Composer之后,在命令行执行

composer global require phpunit/phpunit

全局安装PHPUnit。然后在~/.bashrc文件末尾加一行PATH=$PATH:/home/feng/.composer/vendor/bin(注意替换用户名),来将Composer的global bin目录加入PATH。

安装过后运行phpunit --version看到版本信息则说明安装成功。

另外,装完以后我发现Ubuntu系统可以使用apt-get install phpunit来安装,但我没有试过。

在Windows下我用的是XAMPP环境,其中已经内置PHPUnit了。如果要在命令提示符下使用的话,可以修改环境变量中的PATH,在里面加上C:\xampp\php(或者你修改后的路径)。再打开命令提示符,运行phpunit --version看一下。

2.第一个测试

第一个Tutorial我使用的是PHPUnit官网上的Getting Started,这里写的比它还要简单一点。

项目的目录结构如下:

├── phpunit.xml

├── src

│   ├── autoload.php

│   └── Money.php

└── tests

└── MoneyTest.php

第一个文件是项目代码src/Money.php,内容如下:

class Money

{

private $amount;

public function __construct($amount)

{

$this->amount = $amount;

}

public function getAmount()

{

return $this->amount;

}

public function negate()

{

return new Money(-1*$this->amount);

}

}

与之对应的单元测试是tests目录下的MoneyTest.php,注意单元测试文件名最好是*Test.php,这样以后指定tests目录便可以执行目录下的所有测试。

class MoneyTest extends PHPUnit_Framework_TestCase

{

public function testCanBeNegated()

{

$a = new Money(1);

$b = $a->negate();

$this->assertEquals(-1, $b->getAmount());

}

}

代码很简单,$this->assertEquals(-1, $b->getAmount());即断言后一个参数的执行结果与前一个参数相等,其他不解释了。

现在,如果在MoneyTest.php里加一行include_once('../src/Money.php');。然后在项目根目录下执行phpunit tests/MoneyTest,就可以看到执行结果了。

3.自动载入

但是,逐个添加include的方式太不方便,最好是能自动include所需的文件,PHPUnit提供了一个参数--bootstrap,可以使用项目的autoload文件。这里我自己写了一个最简单的autoload.php,只要4行。这个文件并不是PHPUnit专用的,应该放在src目录下。

function __autoload($class){

include $class.'.php';

}

spl_autoload_register('__autoload');

当需要Money类时,就去include Money.php。写完__autoload()函数之后要用spl_autoload_register()注册上。

现在就可以去掉MoneyTest.php中的include语句,使用phpunit --bootstrap src/autoload.php tests/MoneyTest来执行测试了。

虽然可以自动载入,但是要执行的命令更长了。我们还可以写一个配置文件来为项目指定bootstrap,这样就不用每次都写在命令里了。

配置文件phpunit.xml放在项目根目录下。

如果要执行MoneyTest,在项目根目录下执行:phpunit tests/MoneyTest

如果要执行tests目录下的所有测试,在项目根目录下执行:phpunit tests

Reference:

php phpunit_framework_testcase,开始使用PHPUnit相关推荐

  1. [PHPUnit]自动生成PHPUnit测试骨架脚本-提供您的开发效率【2015升级版】

    2019独角兽企业重金招聘Python工程师标准>>> 场景 在编写PHPUnit单元测试代码时,其实很多都是对各个类的各个外部调用的函数进行测试验证,检测代码覆盖率,验证预期效果. ...

  2. centos --- phpunit 安装过程

    2019独角兽企业重金招聘Python工程师标准>>> 安装pear 的命令如下: $ wget http://pear.php.net/go-pear.phar $ php go- ...

  3. Xampp安装PHPUnit

    原文地址:http://www.xbc.me/install-phpunit-on-xampp/ 最近准备着手开发Magento的插件,为了保证插件的代码质量,决定采用TDD的方法进行开发.在PHP实 ...

  4. php测试框架,PHPUnit使用

    #### 1.安装 PHPUnit如果使用PHAR安装的话很简单.Phar归档就像Java的Jar,可以直接被PHP解释器执行.在*nix系统下,可以执行下面三条命令: ~~~ ➜ wget http ...

  5. php_os用法,PHP教程:PHPUnit学习笔记(二)PHPUnit基本用法

    上篇日记中我介绍了phpunit的配置方法,今天就开始介绍如何用PHPUnit来编写测试用例,下面我来引入一个测试PHP数组操作的测试用例,这个例子会给你展示PHPUnit常规的用法和测试用例编写的步 ...

  6. PHPUNIT 单元测试

    在windows上的安装可以参考其手册 首先下载phpunit.phar文件 1. 为php的二进制可执行文件建立 一个目录,如C:\bin 2. 将C:\bin添加到系统环境变量中, 3. 打开命令 ...

  7. PHPUnit简介及使用(thinkphp5的单元测试安装及使用)

    PHPUnit简介及使用(thinkphp5的单元测试安装及使用) 一.总结 一句话总结:直接google这个phpunit(how to use phpunit),然后去官网看使用样例和手册,那些英 ...

  8. PHP zendframework phpunit 深入

    安装包管理 curl -sS https://getcomposer.org/installer | /usr/local/php/bin/php 将证书安装到 ~$ mkdir ~/tools/ht ...

  9. php 安装测试程序,PHPUnit安装及使用示例

    PHPUnit是zend官方大力支持的测试框架,高质量的单元测试时保证项目质量的基础,能够有效的减少BUG,改善程序. 安装PHPUnit: 在php的目录下: pear channel-discov ...

  10. php向bat中传递参数,php-将参数传递给PHPUnit

    php-将参数传递给PHPUnit 我开始编写PHPUnit测试,并且希望这些测试可以在开发人员的机器以及我们的服务器上运行. 开发人员计算机的设置与服务器不同,甚至彼此不同. 要在这些不同的地方运行 ...

最新文章

  1. c java 的关系,c#与c、java的关系
  2. 直播预告丨深耕用户价值,实战保险业数字化升级
  3. 汇编语言——《分支与循环程序设计》实验任务书
  4. 多个动态包含一个JSF标签
  5. python关于路径需使用的方法笔记
  6. leetcode —— 面试题32 - III. 从上到下打印二叉树 III
  7. 2021高通AI应用创新大赛-创新赛道-垃圾分类识别 第二次讨论会
  8. 运行第一个PHP程序
  9. AJAX with JSP and Servlet(代码)
  10. java 包的package和import语句
  11. Java思维导图(1)
  12. 规约转换装置的一些概念
  13. python系列之supervisor进程管理
  14. The coordinates or measures are out of bounds.
  15. P9 力荐!阿里巴巴最新出品 776 页 JDK 源码 + 并发核心原理解析小册
  16. love2d教程10--粒子效果
  17. 我们称字母顺些和逆写都相同的单词或者短语为“回文”,编写一个Java程序判断输入的一行文本是否是回文。
  18. 服务器网口灯亮但显示未插网线,网线插路由器WAN口,但WAN口灯不亮怎么办?
  19. 精选(26)面试官:讲讲你对ThreadLocal的理解
  20. ftp服务器文件防盗链,IIS防盗链组件

热门文章

  1. 外星人17r4原版系统_外星人17r4重装系统
  2. 岩七郎·小山馆の《圣童》章目概要
  3. windows10安装Python 3.xx.xx,勾选 Download debugging symbols或Download debug binari两项安装失败解决办法
  4. windows配置本地的虚拟主机
  5. pyvoronoi包 Failed to build pyvoronoi Installing collected packages: pyvoronoi Running setup.py
  6. 内存管理基本原理及非ARC环境使用小心得
  7. 多张图片合成一张jpg工具_将多张图片合并成一张图片的小工具Collagerator
  8. 企业邮箱文件被彻底删除怎么恢复?误删恢复有哪些方法呢?
  9. 微信小程序,短信验证码登录,设置密码,密码强度校验
  10. 横版闯关手游【觉醒大陆90装备版】5月最新整理商业Linux手工服务端+吃鸡+组队PK+运营后台+CDK清包后台+GM授权后台+安卓苹果双端+视频教程+详细搭建教程