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);
Макет будет возвращать последний из этих параметров для каждого последующего вызова.