我正在使用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);
});
和其他人无济于事。当然,我在这里错过了一些简单的东西。这个 看起来应该很容易。
谢谢你们,
西奥。
答案 0 :(得分:3)
这让我大吃一惊,直到我发现它真的很简单:只需使用所有预期的返回值作为第一个returns()
语句的参数。
expect(list.getItemAt(0)).returns("Item1", "Item2", "Item3", "Item4").inSequence(seq);
模拟将为每个后续调用返回最后一个参数。