在PHPSpec / Prophecy中通过引用传递的形式参数的存根

时间:2014-02-06 11:18:08

标签: php phpspec

我在PHP中有一个方法,如下所示:

<?php
class SomeClass
{
    public function isEntitledToDiscount(GuestModel $who, $onWhat, &$discountAmount = null)
    {
        $discountAmount = 10;
        return true;
    }
}

有没有办法在PHPSpec中存根$discountAmount?假设我有一个我正在测试的类,我通过构造函数注入了$someService。在我的规范中,我使用:

<?php
$someService->isEntitledToDiscount($guest, $ticket, $discountAmount)->willReturn(true);

为方法返回值创建存根。如何使用$discountAmount形式参数执行此操作?

1 个答案:

答案 0 :(得分:2)

方法不应修改其参数(不应有副作用)。特别是吸气型方法。 您应该重新考虑您的设计。

您的问题实际上与问题相关,因此您可能需要阅读其文档:https://github.com/phpspec/prophecy

预言(和PhpSpac)使事情变得艰难。在大多数情况下,这意味着你试图用你的设计做错了

您可以尝试以下操作,但我认为您不会获得对变量的引用:

$someService->isEntitledToDiscount($guest, $ticket, $discountAmount)
    ->will(function ($arguments) {
        // do your evil
    });

推荐阅读:Command Query Separation