tags:

views:

206

answers:

2

If I want to mock a class that returns a string that is used to determine whether while loop should continue (imagine read while string != null), how can I set the expectation. I have tried the following:

    provider.Reader.Expect(r => r.ReadLine()).Return("1,10,20");
    provider.Reader.Expect(r => r.ReadLine()).Return(null);

but when it is called twice in the same method, it returns the first string on both occasions, whereas I want it to return the second value (null) if called a second time.

A: 

I'm not familiar with the syntax you're using. I would write this as:

r.ReadLine();
LastCall.Return("1,10,20").Repeat.Once();
r.ReadLine();
LastCall.Return(null).Repeat.Once();

To ensure that you're specifying the number of times that things are to be repeated. (Don't have Visual Studio to hand, syntax may not be exact.)

Joe
This is the 3.5 fluent syntax.
Colin Desmond
+4  A: 

I think you can just stick the repeat on the end of the syntax you're currently using.

provider.Reader.Expect(r => r.ReadLine()).Return("1,10,20").Repeat.Once();
provider.Reader.Expect(r => r.ReadLine()).Return(null).Repeat.Once();

or

 provider.Reader.Expect(r => r.ReadLine()).Return("1,10,20").Repeat.Once();
    provider.Reader.Expect(r => r.ReadLine()).Return(null);

if you have any calls beyond 2nd call that you want to use second expectation.

Binz