PHP PHPUnit的简单使用
1.Pear的官方教程:https://phpunit.de/manual/current/zh_cn/phpunit-book.html#writing-tests-for-phpunit
2.将Pear的安装目录的路径,加入Path;在CMD中,执行 "pear list" ,

如果没有,PHPUnit模块,执行

3.在php.ini文件的 include_path 路径,将pear的相关的文件路径加进去 ,这是我的:

4. 在编写测试文件时,直接include下面,是找不到TestCase类的,

会报错:
PHP Fatal error: Class 'TestCase' not found in H:\Slg\SlgCardsServer\actions\MyTest.php on line 26
这是,因为include_path路径下面的文件TestCase.php的TestCase并不存在,这是要自己编写的。
5. 如果不使用自己编写的TestCase类,可以继承 PHPUnit_Framework_TestCase 类。这个类继承了PHPUnit_Framework_Assert,提供了一些基本的asset***的断言方法。
6.如下代码:
<?php include_once 'PHPUnit\TestCase.php'; class Test extends PHPUnit_Framework_TestCase
{
public function testEmpty()
{
$stack = [];
$this->assertNotEmpty($stack); return $stack;
} /**
* @depends testEmpty
*/
public function testPush(array $stack)
{
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertNotEmpty($stack); return $stack;
} /**
* @depends testPush
*/
public function testPop(array $stack)
{
$this->assertEquals('foo', array_pop($stack));
$this->assertEmpty($stack);
}
} ?>
当第一个函数的测试代码有问题时,运行结果:

7.多重依赖的代码测试:
<?php
include_once 'PHPUnit\TestCase.php'; class Test extends PHPUnit_Framework_TestCase
{
public function testProduceFirst()
{
$this->assertTrue(true);
return 'First';
} public function testProduceSecond()
{
$this->assertTrue(true);
return 'Second';
} /**
* 下面的依赖
* @depends testProduceFirst
* @depends testProduceSecond
*/
public function testEquals()
{
return $this->assertEquals(
['first','second'],
func_get_args()
);
}
} ?>
运行结果:

10 .数据提供器
1)数据供给器方法必须声明为 public,其返回值要么是一个数组,其每个元素也是数组;要么是一个实现了 Iterator 接口的对象,在对它进行迭代时每步产生一个数组。每个数组都是测试数据集的一部分,将以它的内容作为参数来调用测试方法。
2)测试代码:
<?php
include_once 'PHPUnit\TestCase.php'; class DataProviderTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider additionProvider
*/
public function testAdd($a,$b,$sum)
{
$this->assertEquals($sum,$a+$b);
} public function additionProvider()
{
return [
'Data1' => [1,2,3],
'Data2' => [4,7,9],
'Data3' => [5,4,9],
];
}
} ?>
运行的结果:

要点:
1.文档注释块(docblock)中使用 @test 标注将其标记为测试方法,用 @depends 标注来表达测试方法之间的依赖关系。
2.如果需要传递对象的副本而非引用,则应当用 @depends clone 替代 @depends。
3.PHPUnit 不会更改测试的运行顺序,因此你需要自行保证某个测试所依赖的所有测试均出现于这个测试之前。
4.如果出现找不到PHPUnit相关的头文件,可以用在相关文件输出get_include_path()的结果查看. 在php.ini 可以找 “”include_path" 关键字,定位原因。
在 PHPUnit的目录下有一个文件Autoload.php,在设置了php.ini的include_path的变量之后,在使用文件中,包括该文件。
5.在安装XDebug的前提下(extension = XDEBUG_PATH 替换为 zend_extension = XDEBUG_PATH ),可以运行:phpunit --coverage-html "OUTPUT_PATH" CalculatorTest ,生成一个报表,HTML格式,可以了解此次测试代码的覆盖率。 默认在当前目录生成OUTPUT_PATH目录。
6.不要将被测试的类和测试类放在同一个文件,这样是生成的XDEBUG代码覆盖率报告数据都是空的。
7. 测试类里面的测试函数一定要以 "test"开头 !!!
PHP PHPUnit的简单使用的更多相关文章
- linux下安装phpunit简单方法
现在安装phpunit相当简单,只需要下载phar压缩格式的phpunit文件,给个执行权限,就可以执行了 以下是一段官方安装文档 wget https://phar.phpunit.de/phpun ...
- 使用PHPUnit + Selenium进行自动化测试
project: blog target: how-to-use-phpunit-selenium-test.md date: 2015-12-22 status: publish tags: - S ...
- Laravel 单元测试
前言 今天是第十三周周一,虽然接下来的时间会比较忙,比如各科的课设.考试.磨锤子.但是还是有种涅槃重生的感觉,昨晚的睡眠确实不怎么样,但是今天十分精神,已经想不起来多久没有这么早起了~让我累并快乐着吧 ...
- phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识
16:45 2015/12/8phpunit测试学习 1:一点简单的扼要有用的东西的总结 一点入门认识 具体的入门安装和入门实践请参照文中的推荐博客或网上其他博客推荐博客,我感觉这几篇博客写得很不错 ...
- PHPUnit单元测试的简单使用
何为单元测试: 指对软件中的基本单元进行测试,如函数.方法等,以检查其返回值或行为是否符合预期:实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文 ...
- 安装并使用PHPunit
安装并使用PHPunit Linux 下安装PHPunit PHP 档案包 (PHAR) 要获取 PHPUnit,最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPU ...
- PHPUnit笔记
PHPUnit是一个面向PHP程序员的测试框架,这是一个xUnit的体系结构的单元测试框架. 复杂的项目,通过单元测试能够快速排查bug,有效减少bug的产生.简单的项目,使用php自带的var_du ...
- 初试PHP单元测试TDD之安装PHPUnit
东风吹战鼓擂,一年一度的校招季开始了,最为一名即将踏入社会的搬砖工,自然也闲不下来了.各种总结.恶补.面经在所难免.当遇见敏捷开发时,有点蒙了,这是什么东东,绝对不能吃!既然是一种软件开发的方式,听上 ...
- phpunit学习 3:
16:17 2015/12/11phpunit学习 3:单元测试的大概步骤是:编写待测试类,编写测试用例类,编写测试类,测试.1.如果你有多个类,多个测试类的test类,那么可以编写一个AllTest ...
随机推荐
- thrift 一个有意思的特性:Class名称无关性
最近开发的一个项目,后端采用thrift框架来提供rpc服务(java语言实现),然后前端采用php语言来生成thrift client调用后台RPC服务.由于某些原因,上周我把thrift定义文件中 ...
- js实现弹框及自动关闭
<SCRIPT LANGUAGE="javascript"> < !-- window.open (''page.html'',''newwindow'',''h ...
- 怎样让 Web 项目暴露在外的服务坚不可摧?
Web 项目一般给特定人群使用,有些是局域网用户量不足1K的内部系统,也有些广域网用户上万的中型项目,当然还有用户上亿的大型项目. 这些大大小小的 Web 项目都会有用户登录的存在,登录后有特定的权限 ...
- ionic android双击退出应用和物理返回按钮隐藏键盘的实现
angular.module('starter', ['ionic', 'route', 'config', 'global', 'commonJs', 'ngCordova']) .run(['$i ...
- C++ URLDecode和URLEncode实现——仅限gb2312,非utf8
转载--http://blog.163.com/zhangjie_0303/blog/static/9908270620148251658993/ #include <iostream> ...
- Fiddler 抓包工具总结
阅读目录 1. Fiddler 抓包简介 1). 字段说明 2). Statistics 请求的性能数据分析 3). Inspectors 查看数据内容 4). AutoResponder 允许拦截制 ...
- mybatis一个怪异的问题: Invalid bound statement not found
ssm中报一下错误: invalid bound statement (not found): me.tspace.pm.dao.userdao.getuser at org.apache.ib ...
- Day1-python基础1
本次学习内容 Python介绍 发展史 版本选择 install 第一个程序hello world 字符编码及注释 变量 用户输入 表达式if...else 一.Python介绍 1)Python由来 ...
- 使用U盘重装电脑操作系统
1. 打开360软件管家,找一个软件"蚂蚁U盘启动"下载,下载好以后打开,电脑上插入U盘,我们制作一个启动U盘备用! 图片图片 按提示制作好启动盘后,保管好U盘. 找一个系统下载网 ...
- sqlserver text/ntext 字段读取
sqlserver ntext 字段在读取时返回值 net.sourceforge.jtds.jdbc.ClobImpl@555bc78f 需要在连接数据库的URL后边加上";useLOBs ...