首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Prophecy中模拟相同的方法,以便在每个调用中返回不同的响应

如何在Prophecy中模拟相同的方法,以便在每个调用中返回不同的响应
EN

Stack Overflow用户
提问于 2015-09-01 16:22:10
回答 2查看 6.1K关注 0票数 4

在纯PHPUnit模拟中,我可以这样做:

代码语言:javascript
复制
$mock->expects($this->at(0))
    ->method('isReady')
    ->will($this->returnValue(false));

$mock->expects($this->at(1))
    ->method('isReady')
    ->will($this->returnValue(true));

我不能用预言做同样的事。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-24 13:14:26

您可以使用:

代码语言:javascript
复制
$mock->isReady()->willReturn(false, true);

显然,它没有文档化(请参阅https://gist.github.com/gquemener/292e7c5a4bbb72fd48a8)。

票数 11
EN

Stack Overflow用户

发布于 2016-08-27 12:26:30

还有另一种有记录的方法可以做到这一点。如果您期望在第二个调用中得到不同的结果,这意味着在这两者之间发生了一些变化,并且您可能使用setter来修改对象的状态。这样,您就可以告诉模拟在调用带有特定参数的setter之后返回特定的结果。

代码语言:javascript
复制
$mock->isReady()->willReturn(false);

$mock->setIsReady(true)->will(function () {
    $this->isReady()->willReturn(true);
});

// OR

$mock->setIsReady(Argument::type('boolean'))->will(function ($args) {
    $this->isReady()->willReturn($args[0]);
});

这里有更多关于https://github.com/phpspec/prophecy#method-prophecies-idempotency的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32336511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档