Question

I'am using Mockolate and flex unit 4 to write mocks for my tests in AS3. I want to call the same method on a mock with the same arguments multiple times and return a different result each time. A basic example is:

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

This results in:

Item1 
Item2 
Item2 

And and error:

1 unmet Exception

What I want is

Item1 
Item2 
Item2 

and no exceptions, i.e. test passes.

I've tried a few alternatives such as:

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

and others to no avail. Surely I'm missing something simple here. This seems like something that should be easy.

Thanks guys,

Theo.

Was it helpful?

Solution

This bugged the hell out of me, until I found out it is really very simple: Just use all the expected return values as parameters to the first returns() statement.

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

The mock will return the last of these parameters for each subsequent call.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top