Mockolate - 在具有相同参数的模拟上调用相同的方法但返回不同的结果

时间:2012-07-03 13:34:24

标签: actionscript-3 mocking tdd flexunit4 mockolate

我正在使用Mockolate和flex单元4为AS3中的测试编写模拟。我想在具有相同参数倍数的模拟上调用相同的方法 每次都会返回不同的结果。一个基本的例子是:

            [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); 
                    }); 

和其他人无济于事。当然,我在这里错过了一些简单的东西。这个 看起来应该很容易。

谢谢你们,

西奥。

1 个答案:

答案 0 :(得分:3)

这让我大吃一惊,直到我发现它真的很简单:只需使用所有预期的返回值作为第一个returns()语句的参数。

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

模拟将为每个后续调用返回最后一个参数。

相关问题