2010-07-13 2 views
2

Я получил это действительно интересный метод MOq, что фальшивки мой GetService, выглядит следующим образомMoq для Rhino - фальшивка частичный репозиторий

private Mock<IGetService<TEntity>> FakeGetServiceFactory<TEntity>(List<TEntity> fakeList) where TEntity : class, IPrimaryKey, new() 
{ 
    var mockGet = new Mock<IGetService<TEntity>>(); 
    mockGet.Setup(mock => mock.GetAll()).Returns(fakeList); 
    mockGet.Setup(mock => mock.Get(It.IsAny<int>())).Returns((int i) => fakeList.Find(fake => fake.Id.ToString() == i.ToString())); 
    mockGet.Setup(mock => mock.Get(It.IsAny<Expression<Func<TEntity, bool>>>())).Returns((Expression<Func<TEntity, bool>> expression) => fakeList.AsQueryable().Where(expression)); 

    return mockGet; 
} 

и использовать это ...

var fakeList = new List<Something>(); 
fakeList.Add(new Something { Whatever = "blah" }); 
//do this a buncha times 

_mockGetService = FakeGetServiceFactory(fakeList); 
_fakeGetServiceToInject = _mockGetService.Object; 

Как я бросить это в Rhino.Mock?

ответ

1

Что-то вдоль этих линий (извините, у меня нет под рукой VS, так что я не могу проверить его):

private IGetService<TEntity> FakeGetServiceFactory<TEntity>(List<TEntity> fakeList) where TEntity : class, IPrimaryKey, new() 
{ 
    var mockGet = MockRepository.GenerateMock<IGetService<TEntity>>(); 
    mockGet.Expect(mock => mock.GetAll()).Return(fakeList); 
    mockGet.Expect(mock => mock.Get(Arg<int>.Is.Anything)).Do((int i) => fakeList.Find(fake => fake.Id.ToString() == i.ToString())); 
    mockGet.Expect(mock => mock.Get(Arg<Expression<Func<TEntity, bool>>>.Is.Anything)).Do((Expression<Func<TEntity, bool>> expression) => fakeList.AsQueryable().Where(expression)); 

    return mockGet; 
} 
+0

Sweeeet. Это полон победы. Благодарю. – jeriley

+0

@jeriley: Я считаю, что это запишет 3 ожидаемых вызова, каждый из которых должен быть вызван в данном порядке тестом. Я не думаю, что это то, что вы хотите здесь. Вместо этого попробуйте использовать заглушки. Я попытался объяснить разницу в сообщении в блоге: http://mindinthewater.blogspot.com/2010/02/mocking-frameworks-stubs-vs-mocks.html –

+0

@Wim, вам не нужно называть эти в определенном порядке. Я не уверен, как работает Mock Setup, но возможно, что они должны быть изменены на Stubs. – Grzenio

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