2016-09-20 3 views
0

Das Set-up verwendet, ist ganz einfach:Stub wird nicht zurückkehren unterschiedliche Rückgabewerte wiederholen

var myMock = MockRepository.GenerateMock<IInterface>(); 
myMock.Stub(r => r.GetAll(null)) 
     .IgnoreArguments(); 


myMock.Return(new List<DTO> { dto2 }).Repeat.Once(); 
myMock.Return(new List<DTO> { dto1, dto2 }); 

dto1 und 2 sind zwei vordefinierte Objekte.

Wenn die Methode GetAll das erste Mal aufgerufen wird, wird die Liste mit 2 Elementen zurückgegeben! Die erste Definition sollte zuerst zurückgegeben werden, und alle anderen Aufrufe würden die Liste mit 2 Elementen zurückgeben.

Was passiert?

** Ich habe nach dem Grund gesucht, aber nichts gefunden.

Antwort

0

entschied ich mich mit einer bösen Abhilfe zu gehen:

var callNumber = 1; 
myMock.Stub(r => r.GetAll(null)) 
     .WhenCalled(m => 
     { 
      m.ReturnValue = callNumber != 1 ? new List<DTO> { dto1, dto2 } : new List<DTO> { dto2 }; 

      callNumber++; 
     }); 
0

In RhinoMocks müssen Sie wahrscheinlich eine geordnete Folge von Erwartungen erfassen:

var mock = MockRepository.GenerateMock<IInterface>(); 
using (mock.GetRepository().Ordered()) 
{ 
    mockFoo.Expect(x => x.GetAll(null)).IgnoreArguments().Return(result1); 
    mockFoo.Expect(x => x.GetAll(null)).IgnoreArguments().Return(result2); 
} 
mock.Replay(); 

// rest of the test goes here... 

mock.VerifyAllExpectations(); 

In Moq wäre es ein bisschen eleganter sein mit SetupSequence:

myMock.SetupSequence(x => x.GetAll(It.IsAny<TheArgType>())) 
     .Returns(new List<DTO> { dto2 }) 
     .Returns(new List<DTO> { dto1, dto2 }); 
Verwandte Themen