3

次のコードを使用して、クルーザーが 2 回呼び出されたことをテストできます。しかし、最初の呼び出しのパラメーターが 7 で、2 番目の呼び出しのパラメーターが 8 であることをテストする方法は?

id cruiser = [Cruiser cruiser];
[[cruiser should] receive:@selector(energyLevelInWrapCore:) withCount:2];
[cruiser energyLevelInWarpCore:7];
[cruiser energyLevelInWarpCore:8];

メソッドが呼び出された後にパラメータを取得することは可能ですか? 次のコードのように。

id cruiser = [Cruiser cruiser];
[cruiser stub:@selector(energyLevelInWarpCore:)];
[cruiser energyLevelInWarpCore:7];
[cruiser energyLevelInWarpCore:8];
[[[[[cruiser stub] calles][1] arguments][0] should] equal:theValue(8)]; // This doesn't work
4

1 に答える 1

1

実際のコード例はありますか? あなたが与えた例energyLevelInWarpCore:では、テストの一番上でスタブしたので、他のコードを呼び出していないので、テストが失敗することはありません。実際に行っているのは、テスト フレームワークを実行することだけです。

Cruiserの単一のインスタンスを持つオブジェクトがあるとしますWarpCoreCruiserメッセージを送信するengageと、ワープ コアが準備され、フル スピードでパワーアップします。

describe(@"Cruiser", ^{
    describe(@"-engage", ^{
        it(@"primes the warp core then goes to full speed", ^{
            id warpCore = [WarpCore mock];
            Cruiser *enterprise = [Cruiser cruiserWithWarpCore:warpCore];

            [[[warpCore should] receive] setEnergyLevel:7];
            [[[warpCore should] receive] setEnergyLevel:8];

            [enterprise engage];
        });
    });
});

メッセージ パターンは、引数をテストする 1 つの方法です ( も使用できますreceive:withArguments:)。上記の例は、同じセレクターに対して 2 つの期待値を設定するが、引数が異なると、2 つの一意のアサーションになることを示しています。

Capture Spiesを使用して、非同期コードなどのより複雑なシナリオで引数をテストすることもできます。

于 2013-06-16T11:10:45.623 に答える