Универсальный репозиторий с Moq

1

Я использую Moq и пытаюсь высмеять IDummyRepository, который реализует интерфейс IGenericRepository, и необходимо проверить вызов метода Add для IGenericRepository. Но с приведенным ниже примером кода я получаю исключение MockException.

Если я заменил IGenericRepository в ServiceDummy для IDummyRepository, то тест работает, но не так, как мне нужно.

Как это может работать?

[TestClass]
public class DummyServiceSpec
{
    protected DummyService service;
    protected DummyModel model;

    [TestClass]
    public class Work : DummyServiceSpec
    {
        [TestMethod]
        public void ExpectToWork()
        {
            var repositoryMock = new Mock<IDummyRepository>();
            var serviceDummy = new ServiceDummy(repositoryMock.Object);
            var entity = new Dummy { DummyString = "DummyString" };

            serviceDummy.Add(entity);

            repositoryMock.Verify(r => r.Add(It.IsAny<Dummy>()), Times.AtLeastOnce());
        }
    }
}

public class ServiceDummy
{
    protected IGenericRepository<Guid, Dummy> dummyRepository;

    public ServiceDummy(IDummyRepository dummyRepository)
    {
        this.dummyRepository = dummyRepository;
    }

    public virtual void Add(Dummy entity)
    {
        this.dummyRepository.Add(entity);
    }
}
  • 0
    Что за исключение?
Теги:
testing
mocking
moq

2 ответа

0
Лучший ответ

Извините, я просто нашел проблему, это была ошибка в моем коде GenericRepository.

1

Попробуйте переместить код ожидания репозитория в настройку вашего Moq в репозитории. Поскольку метод Add() является недействительным, нет никакого результата для проверки, но вы можете сделать его поддающимся проверке, чтобы проверить, что он действительно вызван.

[TestMethod]
public void ExpectToWork()
{
    var repositoryMock = new Mock<IDummyRepository>();
    var serviceDummy = new ServiceDummy(repositoryMock.Object);
    var entity = new Dummy { DummyString = "DummyString" };

    repositoryMock.Setup(i => i.Add(It.IsAny<Dummy>())).Verifiable();

    serviceDummy.Add(entity);
    repositoryMock.Verify();
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню