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 ...
随机推荐
- Mysql完全手册(笔记一,底层与内置函数)
1.MySQL由五个主子系统组成.协同工作,这五个主子系统是: (1)查询引擎 (2)存储管理器 (3)缓冲管理器 (4)事务管理器 (5)恢复管理器 查询引擎: 这个子系统包含三个相互关联的部件: ...
- java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)
多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行. 在我不知道CyclicBarrier之前,最容易想到的就是放置一个公用的 ...
- Ubuntu 14 設定 遠端連線,讓別台電腦可以連線進來
Ubuntu 14 需 disable 加密,方可 遠端連線 此台電腦 xxx@xxx-ThinkPad-T460p:~$ gsettings set org.gnome.Vino require-e ...
- resin启动报错:guava-15.0.jar!/META-INF/beans.xml:5: <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"> is an unexpected top-level tag. 异常
项目完成,经过本地的测试,最后在部署的时候,发现服务器resin启动失败,报错信息如下:
- Linux任务调度进程crontab的使用方法和注意事项
参考文章:Linux任务调度进程crond命令的使用方法和注意事项 一.crond简介 概念 crond的概念和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系 ...
- 线段树 poj 3667
1-n线段 m个操作 1 a 是否可找到连续a个空位子 有输出最左边(然后使这一段被占)没有0 2 a ,b a~b区间变成未使用 #include<stdio.h> #include& ...
- java图形处理-Java Graphics2D
java.awt 类 Graphics2D java.lang.Object 继承者 java.awt.Graphics 继承者 java.awt.Graphics2D public abstract ...
- ubuntu/var/log/下各个日志文件
ubuntu/var/log/下各个日志文件 本文简单介绍ubuntu/var/log/下各个日志文件,方便出现错误的时候查询相应的log /var/log/alternatives.log-更新 ...
- Oracle 图形化以及命令行安装
@(Oracle)[Install] Oracle 安装 相关版本说明 不同版本的Oracle需要安装在特定的系统版本之上. 如Oracle 11gR2的11.2.0.1.0需要安装在CentOS 5 ...
- C++ ## ... 实用
关于...的使用...在C宏中称为Variadic Macro,也就是变参宏.比如:#define myprintf(templt,...)fprintf(stderr,templt,__VA_ARG ...