Mock简介
当我们对A类进行单元测试时,A类可能依赖了B类,为了减少依赖,方便A类方法的测试,我们可以模拟一个B类,简单规定其各方法的返回值(而非真正实现具体逻辑)。Phpunit中提供了一套模拟类的api,简单使用如下:
class StubTest extends PHPUnit_Framework_TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this->getMock('SomeClass');
// Configure the stub.
$stub->expects($this->any())
->method('doSomething')
->will($this->returnValue('foo'));
// Calling $stub->doSomething() will now return
// 'foo'.
$this->assertEquals('foo', $stub->doSomething());
}
}
在这个例子中,我们得到了一个'SomeClass'的模拟,规定其可以被调用任意次,如果调用doSomething方法,将得到值foo。
问题:
我们知道,对于一个单例类,其constructor方法为private,而getMock的实现,默认是要调用原类的constructor方法。
如果SomeClass为单例,phpunit将会提示
CalltoprivateSomeClass::__construct()fromcontext'PHPUnit_Framework_TestCase'
这时,我们的测试该如何进行呢?
解决:
仍然使用getMock进行模拟。
只要将其第5个参数设为false即可。其含意是:不调用原对象的构造函数。
$stub = $this->getMock('SomeClass', array(), array(), '', false);
不得不说,这样使用有点复杂。
如果你使用的是phpunit3.5及以上版本提供了更易用的api,你可以这样禁掉对原有constructor方法的调用。
$stub=$this->getMockBuilder('SomeClass')->disableOriginalConstructor()->getMock();
附:
对getMock的6个可选参数的详解,参见:http://www.phpunit.de/manual/3.6/en/test-doubles.html
手册中并未提及它们的默认值,经测试得到结果如下:
array(),array(),'',false,false,false
即
$stub=$this->getMockBuilder('SomeClass')
等同于:
$stub=$this->getMockBuilder('SomeClass',array(),array(),'',true,false,false)
分享到:
相关推荐
phpunit-mock-objects, PHPUnit的模拟对象库 PHPUnit_MockObjectPHPUnit_MockObject 是PHPUnit默认的模拟对象库。要求PHP 5.6是必需的,但使用最新版本的PHP非常安装你可以使用 Composer 将这里库作为
Mockery:一个简单而灵活的PHP框架模拟对象,用于在PHPUnit中进行单元测试
一个辅助特性可以简化phpunit中的模拟。 要求 PHP:^ 7.4 | ^ 8.0 phpunit / phpunit:^ 9.3 安装 通过作为 。 composer require chubbyphp/chubbyphp-mock " ^1.6 " --dev 用法 <?php declare (strict_types= ...
Mockery是一个简单而灵活PHP模拟对象框架,可用于与PHPUnit,PHPSpec或任何其他测试框架进行单元测试。 它的核心目标是提供一个具有简洁API的测试双重框架,该API能够使用人类可读的领域特定语言(DSL)明确定义...
压缩包内包含PHPUnit4.0-4.8和5.0-5.4...PHPUnit官方提供了一个非常好的批量下载文档入口,只需要建立批量任务 https://phpunit.de/manual/4.*/zh_cn/phpunit-book.pdf 即可批量下载所有版本文档(*号表示具体版本号)
默认情况下在Codeception中启用。 对于PHPUnit,请安装此软件包: composer require codeception/stub --dev 存根 可以使用Codeception\Stub静态调用来构造Codeception\Stub : <?php // create a stub with ...
ci-phpunit-test, 一种简单的使用 PHPUnit 3.x 语言的方法 ci-phpunit-test用于 CodeIgniter 3 。x 在 CodeIgniter 3. x. 中使用PHPUnit的简便方法你根本不需要修改CodeIgniter核心文件。你可以轻松编
PHP的差异比较(Diff)实现,从PHPUnit中分解为一个独立的组件
讲解phpunit的中文文档 对于初学者有很大帮助
think-phpunit, ThinkPHP应用单元测试辅助类
phpunit中文手册下载,涵盖了安装方法,测试提示等等。
PHPUnit 手册 Sebastian Bergmann 出版日期此版本对应于 PHPUnit 4.3。最后更新于2014-11-18。 版权© 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Sebastian Bergmann 本作品依据 Creative ...
phpunit_中文手册说明 根据目录进行的编排!
PHPUnit_Codeception的模拟框架
PHPUnit是一个轻量级的PHP测试框架 它是在PHP5下面对JUnit3系列版本的完整移植 是xUnit测试框架家族的一员 它们都基于模式先锋Kent Beck的设计 单元测试是几个现代敏捷开发方法的基础 使得PHPUnit成为许多大型PHP...
phpunit-speedtrap, 在PHPUnit测试套件中,报告缓慢运行的测试 phpunit-speedtrap SpeedTrap报告你的控制台中PHPUnit测试套件中运行缓慢的测试。影响测试执行时间的许多因素。 测试没有正确地从变量延迟( 数据库,...
网上找到的文档都是比较老旧的了,在官网上找到了最新版的中文手册,觉得还不错,分享给大家。 附上来源地址:https://phpunit.de/documentation.html PHPUnit中文站:http://www.phpunit.cn/ PHPUnit官方站:...
phpunit-extensions 是 Etsy 的 PHPUnit 扩展。 标签:phpunit
PHPUnit手册Sebastian Bergmann 此版本对应于PHPUnit 5.7。最后更新于2017-05026。 版权 2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015 Sebastian Bergmann
用于PHP的HTTP Mock在PHP单元测试中,模拟服务器端的HTTP请求。 PHP的HTTP Mock模拟HTTP请求的服务器端,以允许与HTTP端进行集成测试。 它使用PHP的内置Web服务器t HTTP Mock进行PHP模拟,在PHP单元测试中,服务器端...