设置非常简单:
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 :(得分:1)
在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 });
答案 1 :(得分: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++;
});