2016-09-20 65 views
0

的設置是相當簡單的存根不會返回不同的返回值:使用重複

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和2個2級預定義的對象。

第一次調用方法GetAll時,返回包含2個項目的列表!首先應該返回第一個定義,然後所有其他調用將返回帶有2個項目的列表。

發生了什麼事?

**我查找了原因,但什麼也沒找到。

回答

0

我決定去與一個討厭的解決辦法:

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

在RhinoMocks你可能需要記錄的期望有序序列:

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

在起訂量這將是一個有點更優雅SetupSequence

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