如何调用 Class::function 获得 Mock::function 响应
How to make any call to Class::function get Mock::function response
我正在进行单元测试并尝试用 class 函数替换值 returned,该函数在我的单元测试的其他地方调用。
我开始研究 Mock
对象,这似乎是我的解决方案。
这是我正在使用的代码:
<?php
namespace A;
class SomeClass
{
public function doSomething()
{
return 20;
}
}
/**
* @group DaTest
*/
class DaTest extends \PHPUnit_Framework_TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this
->getMock('A\SomeClass', array('doSomething'))
;
// Configure the stub.
$stub
->expects($this->any())
->method('doSomething')
->willReturn(1)
;
$a = new SomeClass();
var_dump($stub->doSomething)); // Return 1
var_dump($a->doSomething()); // Return 20 -.-'
}
}
如您所见,我觉得我不得不使用 Mock 来获得“1”returned。
但我的目标是制作 SomeClass
return 1 的任何实例,但仅用于我的单元测试。
我错过了什么?
关于如何实现此目标的任何想法?
谢谢。
编辑:
为了准确显示我正在尝试做什么,我得到了另一个代码:
<?php
namespace A;
class SomeClass2
{
public function showSomething()
{
$class = new SomeClass();
// Here print 20, I want it to print 1 in my unit test
echo $class->doSomething();
}
}
我想要的只是 SomeClass2::showSomething()
在我的单元测试中打印 1,在非测试环境中调用它时打印 20 =)
因此,您需要做的是将 SomeClass 的实例作为参数注入 showSomething() 函数。因此,您将能够模拟 SomeClass
<?php
namespace A;
class SomeClass2
{
public function showSomething(SomeClass $classInstance)
{
echo $classInstance->doSomething();
}
}
我正在进行单元测试并尝试用 class 函数替换值 returned,该函数在我的单元测试的其他地方调用。
我开始研究 Mock
对象,这似乎是我的解决方案。
这是我正在使用的代码:
<?php
namespace A;
class SomeClass
{
public function doSomething()
{
return 20;
}
}
/**
* @group DaTest
*/
class DaTest extends \PHPUnit_Framework_TestCase
{
public function testStub()
{
// Create a stub for the SomeClass class.
$stub = $this
->getMock('A\SomeClass', array('doSomething'))
;
// Configure the stub.
$stub
->expects($this->any())
->method('doSomething')
->willReturn(1)
;
$a = new SomeClass();
var_dump($stub->doSomething)); // Return 1
var_dump($a->doSomething()); // Return 20 -.-'
}
}
如您所见,我觉得我不得不使用 Mock 来获得“1”returned。
但我的目标是制作 SomeClass
return 1 的任何实例,但仅用于我的单元测试。
我错过了什么? 关于如何实现此目标的任何想法?
谢谢。
编辑: 为了准确显示我正在尝试做什么,我得到了另一个代码:
<?php
namespace A;
class SomeClass2
{
public function showSomething()
{
$class = new SomeClass();
// Here print 20, I want it to print 1 in my unit test
echo $class->doSomething();
}
}
我想要的只是 SomeClass2::showSomething()
在我的单元测试中打印 1,在非测试环境中调用它时打印 20 =)
因此,您需要做的是将 SomeClass 的实例作为参数注入 showSomething() 函数。因此,您将能够模拟 SomeClass
<?php
namespace A;
class SomeClass2
{
public function showSomething(SomeClass $classInstance)
{
echo $classInstance->doSomething();
}
}