2

所以我在 PhpUnit 测试中有这个:

$alias_manager = $this->prophesize(AliasManagerInterface::class);
$alias_manager->cacheClear($source)->shouldBeCalledTimes(1);

我想告诉 Prophecy,这就是别名管理器应该被调用的所有内容,不应该调用其他方法,也不应该使用任何其他参数调用此方法。后者我可以

$alias_manager->cacheClear(Argument::any())->shouldBeCalledTimes(1);

但是我如何对预言说“没有别的”呢?

4

1 回答 1

2

使用 Prophecy,如果您reveal()立即调用对象预言机,则该对象被假定为虚拟对象。这意味着它将返回null它所预言的对象的所有公共方法。

但是,一旦您添加了一个方法预言机(例如,通过shouldBeCalled...()调用或willReturn()调用),返回的对象将是一个模拟对象或存根对象。在这种情况下,只有配置的调用会起作用,所有其他执行的调用都会触发失败。

换句话说:您不必做任何事情,这是标准行为。

于 2016-02-07T14:16:35.087 回答