2

PHPには次のようなメソッドがあります。

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

$discountAmountPHPSpecでスタブする方法はありますか? $someServiceテスト中のクラスがあり、コンストラクターを介して注入したとしましょう。私の仕様では、次を使用します。

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

メソッドの戻り値のスタブを作成します。$discountAmount仮パラメータでこれを行うにはどうすればよいですか?

4

1 に答える 1

2

メソッドはその引数を変更すべきではありません (副作用があってはなりません)。特にゲッター型のメソッド。おそらく、設計を再考する必要があります。

あなたの問題は実際には予言に関連しているので、そのドキュメントを読みたいと思うかもしれません: https://github.com/phpspec/prophecy

Prophecy (および PhpSpac)は、いくつかのことを困難にします。ほとんどの場合、これは設計を誤った方向に進めようとしていることを意味します

次のことを試すことができますが、変数への参照は得られないと思います。

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

推奨される読み物: Command Query Separation

于 2014-02-09T22:15:02.547 に答える