php phpunit_framework_testcase,开始使用PHPUnit
想试一下单元测试很久了,但是一直没有合适的项目,而且中文网络上的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相关推荐
- [PHPUnit]自动生成PHPUnit测试骨架脚本-提供您的开发效率【2015升级版】
2019独角兽企业重金招聘Python工程师标准>>> 场景 在编写PHPUnit单元测试代码时,其实很多都是对各个类的各个外部调用的函数进行测试验证,检测代码覆盖率,验证预期效果. ...
- centos --- phpunit 安装过程
2019独角兽企业重金招聘Python工程师标准>>> 安装pear 的命令如下: $ wget http://pear.php.net/go-pear.phar $ php go- ...
- Xampp安装PHPUnit
原文地址:http://www.xbc.me/install-phpunit-on-xampp/ 最近准备着手开发Magento的插件,为了保证插件的代码质量,决定采用TDD的方法进行开发.在PHP实 ...
- php测试框架,PHPUnit使用
#### 1.安装 PHPUnit如果使用PHAR安装的话很简单.Phar归档就像Java的Jar,可以直接被PHP解释器执行.在*nix系统下,可以执行下面三条命令: ~~~ ➜ wget http ...
- php_os用法,PHP教程:PHPUnit学习笔记(二)PHPUnit基本用法
上篇日记中我介绍了phpunit的配置方法,今天就开始介绍如何用PHPUnit来编写测试用例,下面我来引入一个测试PHP数组操作的测试用例,这个例子会给你展示PHPUnit常规的用法和测试用例编写的步 ...
- PHPUNIT 单元测试
在windows上的安装可以参考其手册 首先下载phpunit.phar文件 1. 为php的二进制可执行文件建立 一个目录,如C:\bin 2. 将C:\bin添加到系统环境变量中, 3. 打开命令 ...
- PHPUnit简介及使用(thinkphp5的单元测试安装及使用)
PHPUnit简介及使用(thinkphp5的单元测试安装及使用) 一.总结 一句话总结:直接google这个phpunit(how to use phpunit),然后去官网看使用样例和手册,那些英 ...
- PHP zendframework phpunit 深入
安装包管理 curl -sS https://getcomposer.org/installer | /usr/local/php/bin/php 将证书安装到 ~$ mkdir ~/tools/ht ...
- php 安装测试程序,PHPUnit安装及使用示例
PHPUnit是zend官方大力支持的测试框架,高质量的单元测试时保证项目质量的基础,能够有效的减少BUG,改善程序. 安装PHPUnit: 在php的目录下: pear channel-discov ...
- php向bat中传递参数,php-将参数传递给PHPUnit
php-将参数传递给PHPUnit 我开始编写PHPUnit测试,并且希望这些测试可以在开发人员的机器以及我们的服务器上运行. 开发人员计算机的设置与服务器不同,甚至彼此不同. 要在这些不同的地方运行 ...
最新文章
- c java 的关系,c#与c、java的关系
- 直播预告丨深耕用户价值,实战保险业数字化升级
- 汇编语言——《分支与循环程序设计》实验任务书
- 多个动态包含一个JSF标签
- python关于路径需使用的方法笔记
- leetcode —— 面试题32 - III. 从上到下打印二叉树 III
- 2021高通AI应用创新大赛-创新赛道-垃圾分类识别 第二次讨论会
- 运行第一个PHP程序
- AJAX with JSP and Servlet(代码)
- java 包的package和import语句
- Java思维导图(1)
- 规约转换装置的一些概念
- python系列之supervisor进程管理
- The coordinates or measures are out of bounds.
- P9 力荐!阿里巴巴最新出品 776 页 JDK 源码 + 并发核心原理解析小册
- love2d教程10--粒子效果
- 我们称字母顺些和逆写都相同的单词或者短语为“回文”,编写一个Java程序判断输入的一行文本是否是回文。
- 服务器网口灯亮但显示未插网线,网线插路由器WAN口,但WAN口灯不亮怎么办?
- 精选(26)面试官:讲讲你对ThreadLocal的理解
- ftp服务器文件防盗链,IIS防盗链组件
热门文章
- 外星人17r4原版系统_外星人17r4重装系统
- 岩七郎·小山馆の《圣童》章目概要
- windows10安装Python 3.xx.xx,勾选 Download debugging symbols或Download debug binari两项安装失败解决办法
- windows配置本地的虚拟主机
- pyvoronoi包 Failed to build pyvoronoi Installing collected packages: pyvoronoi Running setup.py
- 内存管理基本原理及非ARC环境使用小心得
- 多张图片合成一张jpg工具_将多张图片合并成一张图片的小工具Collagerator
- 企业邮箱文件被彻底删除怎么恢复?误删恢复有哪些方法呢?
- 微信小程序,短信验证码登录,设置密码,密码强度校验
- 横版闯关手游【觉醒大陆90装备版】5月最新整理商业Linux手工服务端+吃鸡+组队PK+运营后台+CDK清包后台+GM授权后台+安卓苹果双端+视频教程+详细搭建教程