有时候,我们需要模拟接口的某些方法以使其工作,而我们并不真正在意它会返回什么,我们只需要确保它被调用即可。
有一种设置方法
->expects(static::once())->method('someMethod')->willReturn('dumbValue');
但是通常需要在测试中查看调用了哪个参数,然后我们需要使用
->expects(static::once())->method('someMethod')->with(static::equalTo('paramvalue'))->willReturn('dumbValue');
它变得越来越长。
是否有一种方法可以返回给willReturn()方法中模拟的函数提供的参数值? 然后,使用数据提供程序测试输出是如此简单
答案 0 :(得分:0)
我们可以使用闭包来处理回调。
$this->translator = $this->createMock(TranslatorInterface::class);
$this->translator->method('translate')->will(
$this->returnCallback(
function ($msgid) {
return (string)$msgid;
}
)
);
此外,我们不仅可以返回参数值,还可以返回之前生成的任何变量值:
$variable = 'hello'
$this->returnCallback(
function ($msgid) use $variable {
return $msgid . $variable;
}
)
和断言看起来像:
static::assertEquals(
'key',
$this->translator->translate('key');
);
static::assertEquals(
'some text and translated '. 'key',
'some text and translated ' . $this->translator->translate('key');
);