Как создать mock метода с аргументами ссылками
Иногда при тестировании требуется создать mock-заглушку для метода, для которого важно не возвращаемое значение, а измененные параметры переданные по ссылке.
В PHPUnit для этого можно использовать метод returnCallback() передавая ему имитирующую функциональность функцию обратного вызова.
Метод, для которого создается заглушка, может быть public или protected.
Например:
class A
{
function getReference(&$ref)
{
$ref = 99;
return 0;
}
}
class ATest extends PHPUnit_Framework_TestCase
{
function testgetReference()
{
$f = function(&$ref)
{
$ref = 100;
return true;
};
$mock = $this->getMock('A');
$mock->expects($this->any())
->method('getReference')
->will($this->returnCallback($f));
$return = $mock->getReference($a);
$this->assertEquals(100, $a);
$this->assertTrue($return);
}
}