我正在进行单元测试,并尝试替换类函数返回的值,该函数在我的单元测试的其他地方调用。
我开始研究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”。
但我的目标是使SomeClass
的任何实例返回1,但仅用于我的单元测试。
我错过了什么? 关于如何实现这个目标的任何想法?
THX。
编辑: 为了准确显示我正在尝试做的事情,我得到了另一个代码:
<?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; =
答案 0 :(得分:1)
所以你需要做的是将someClass的实例作为showSomething()函数的参数注入。因此,您将能够模拟SomeClass
<?php
namespace A;
class SomeClass2
{
public function showSomething(SomeClass $classInstance)
{
echo $classInstance->doSomething();
}
}