1

AS3でのテスト用のモックを作成するためにMockolateとflexユニット4を使用しています。同じ引数を使用してモックで同じメソッドを複数回呼び出し、毎回異なる結果を返したい。基本的な例は次のとおりです。

            [Rule] 
            public var mocks:MockolateRule = new MockolateRule(); 

            [Mock(type="strict")] 
            public var list:IList; 

            [Test] 
            public function test():void{ 

                    var seq:Sequence = sequence(); 
                    expecting(function ():void { 
                            expect(list.getItemAt(0)).returns("Item1").thrice().inSequence(seq); 
                            expect(list.getItemAt(0)).returns("Item2").inSequence(seq); 
                            expect(list.getItemAt(0)).returns("Item3").inSequence(seq); 
                    }); 

                    trace(list.getItemAt(0)); 
                    trace(list.getItemAt(0)); 
                    trace(list.getItemAt(0)); 

                    verify(list); 
            } 

これにより、次のようになります。

Item1 
Item2 
Item2 

そしてエラー:

1 unmet Exception

私が欲しいのは

Item1 
Item2 
Item2 

例外はありません。つまり、テストに合格します。

私は次のようないくつかの選択肢を試しました:

                    expecting(function ():void { 
                            expect(list.getItemAt(0)).returns("Item1").inSequence(seq); 
                            expect(list.getItemAt(0)).returns("Item2").inSequence(seq); 
                            expect(list.getItemAt(0)).returns("Item3").inSequence(seq); 
                    }); 

と他の人は役に立たない。確かに私はここで何か簡単なものが欠けています。これは簡単なはずのようです。

みんなありがとう、

テオ。

4

1 に答える 1

3

これは、本当に非常に単純であることがわかるまで、私を悩ませました。最初のreturns()ステートメントのパラメーターとして、期待されるすべての戻り値を使用するだけです。

 expect(list.getItemAt(0)).returns("Item1", "Item2", "Item3", "Item4").inSequence(seq); 

モックは、後続の呼び出しごとにこれらのパラメーターの最後を返します。

于 2012-07-03T14:31:35.280 に答える