如何获得模拟类/方法的实际返回值?我发现了许多返回固定值的可能性,但我想要调用
的模拟方法的结果namespace Updater\Model; class TestClass { public function testFunction(){ return 12345; } }
class DatabaseTest extends PHPUnit_Framework_TestCase { public function testMock(){ $mock = $this->getMock('Updater\Model\TestClass', array('testFunction')); $mock->expects($this->once())->method('testFunction') // Call the Funciton.... here i would like to get the value 12345 $result = $mock->testFunction(); } }
我没有找到任何如何获得真正的回报价值......令人沮丧的事情:)
答案 0 :(得分:2)
AFAIK你不能用PHPUnit本机模拟做到这一点。有一个名为Mockery的模拟库可以做到这一点:
http://docs.mockery.io/en/latest/reference/expectations.html
寻找passthru()
方法。
那就是说,你需要从模拟中调用真正的方法并不常见。你能解释一个真实的案例吗?您可以模拟方法,以便控制其行为(返回值,抛出异常等)。
答案 1 :(得分:2)
你可以在PHPunit中完成。在这里我的例子。看一下getMock
方法,您必须在其中指定要模拟的方法。
<?php
namespace Acme\DemoBundle\Tests;
class TestClass
{
public function testFunction(){
return 12345;
}
public function iWantToMockThis()
{
return 'mockME!';
}
}
class DatabaseTest extends \PHPUnit_Framework_TestCase
{
public function testMock(){
$mock = $this->getMock('Acme\DemoBundle\Tests\TestClass', array('iWantToMockThis'));
$mock->expects($this->once())
->method('iWantToMockThis')
->willReturn("Mocked!");
// The Real value
$this->assertEquals(12345,$mock->testFunction());
// The mocked value
$this->assertEquals("Mocked!",$mock->iWantToMockThis());
}
}
希望得到这个帮助。