Mockolate - вызов одного и того же метода для макета с одинаковыми аргументами, но с разными результатами

Я использую 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); 
                    }); 

и другие безрезультатно. Конечно, я упускаю что-то простое здесь. Это похоже на то, что должно быть легко.

Спасибо, парни,

Тео.

1 ответ

Решение

Это чертовски отвлекало меня, пока я не узнал, что это действительно очень просто: просто используйте все ожидаемые возвращаемые значения в качестве параметров для первого returns() заявление.

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

Макет будет возвращать последний из этих параметров для каждого последующего вызова.

Другие вопросы по тегам