У меня есть интерфейс, который я хочу смоделировать, и смоделировать поведение одного из его методов.
Итак, я создал обратный вызов, который очень просто высмеивает поведение.
Этот тест проходит, если я создаю новый объект, основанный на этом интерфейсе, но я хотел бы смоделировать интерфейс.
Проверенный метод setUp вызывается нормально, и вызов getVar ('testing') в моем обратном вызове возвращает значение. Однако мое утверждение не выполняется, потому что это значение недоступно.
Кажется, вы не можете сделать это в PHPUnit? Если я не глупый.
Краткое объяснение потока кода; Код в getVar вызывает метод, который вызывает setUp для добавленного плагина. Когда он вызывает «setUp», он переходит в «$ this». Это $ this, которое я ожидаю передать по ссылке и которое работает с «реальным» объектом.
class DefaultRendererTest extends \PHPUnit_Framework_TestCase
{
public function testSetGetVar()
{
$theme = $this->getMock('ThemeInterface');
$plugin = $this->getMock('PluginInterface');
$plugin->expects($this->once())
->method('setUp')
->will($this->returnCallback(function($r){
$r->setVar('testing', "fooBar");
}));
$renderer = new DefaultRenderer($theme, null);
$renderer->addPlugin($plugin);
$this->assertEquals('fooBar',$renderer->getVar('testing'));
}
}
Для информации вот интерфейс, DefaultRenderer реализует RendererInterface
interface PluginInterface
{
function setUp(RendererInterface $renderer);
}