2012-07-03 2 views
1

Я использую Mockolate и flex unit 4 для написания mocks для своих тестов в AS3. Я хочу вызвать тот же метод на макет с теми же аргументами, что и несколько раз , и каждый раз возвращать разные результаты. Основным примером является:Mockolate - вызов того же метода на макет с теми же аргументами, но возвращающий разные результаты

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

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

Спасибо, ребята,

Theo.

+0

Я не уверен: вы хотите утверждать, что если вызов 'list.getItemAt (0)' first time возвращает «item1», второй раз возвращает «item2», а третий возвращает «item3»? – Kasztan

ответ

3

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

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

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

+0

Большое спасибо. Отличное решение! – user1498817

Смежные вопросы