簡體   English   中英

Mockolate - 在具有相同參數的模擬上調用相同的方法但返回不同的結果

[英]Mockolate - Calling the same method on a mock with the same arguments but return different results

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

和其他人無濟於事。 當然,我在這里錯過了一些簡單的東西。 這似乎應該很容易。

多謝你們,

西奧。

這讓我大吃一驚,直到我發現它真的很簡單:只需使用所有預期的返回值作為第一個returns()語句的參數。

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

mock將為每個后續調用返回最后一個參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM