1

我正在使用 Mockolate 和 flex unit 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); 
                    }); 

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

多谢你们,

西奥。

4

1 回答 1

3

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

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

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

于 2012-07-03T14:31:35.280 回答