2016-09-20 7 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 предметов! Первое определение должно быть возвращено первым, а затем все остальные вызовы вернут список с двумя элементами.

Что происходит?

** Я искал причину, но ничего не нашел.

ответ

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

В Moq было бы немного более элегантным SetupSequence:

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

 Смежные вопросы

  • Нет связанных вопросов^_^