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 ...
随机推荐
- pcl曲面重建模块-贪婪三角形投影算法实例
贪婪三角形投影算法 在pcl-1.8测试 #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include &l ...
- iframe异步加载技术及性能
我们会经常使用iframes来加载第三方的内容.广告或者插件.使用iframe是因为它可以和主页面并行加载,不会阻塞主页面.当然使用iframe也是有利有弊的:Steve Souders在他的blog ...
- windows7配置Nginx+php+mysql教程
windows7配置Nginx+php+mysql教程 最近在学习php,想把自己的学习经历记录下来,并写一些经验,仅供参考交流.此文适合那些刚刚接触php,想要学习并想要自己搭建Nginx+php+ ...
- mvc SelectList selected失效的解决方法
ViewBag.QuestionnaireType = new SelectList(questionCollectionTypeList, "CodeID", "Cod ...
- Android开发之XUtils框架使用和报错处理
一.XUtils lib的的添加: 1.点击+,选择第一个Library dependency 2.输入XUtils 按enter键,搜索: 3.然后就是选择XUtils,选择哪个版本就看个人了,接 ...
- JDBC连接各种数据库的地址名称
oracle driverClass:oracle.jdbc.driver.OracleDriver url:jdbc:oracle:thin:@127.0.0.1:1521:dbname ...
- 最为简易的yii 教程(一)
了解目录的框架结构 framework主要有 base 框架核心组件 caching 缓存组件 db 数据库组件 gii ...
- epub电子书--目录结构介绍
epub电子书简介 epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放Open eB ...
- 基于CentOS-7.2.15的Mono+jexus镜像
公司开发及测试的linux环境为CentOS-7.X,因此以CentOS-7.2.15作为基础镜像,镜像尺寸确实比较大,最终Mono-4.6.0.125+Jexus-5.8.1.10镜像尺寸已将近1G ...
- DialogFragment is gone after returning back from another activity
基本情景如下: 在DialogFragment中单击一个按钮跳转到another Activity做一些逻辑处理,然后将返回的结果回显到该DialogFragment上. 处理逻辑是: 在Dialog ...