Я использую 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);
}
}
Извините, я просто нашел проблему, это была ошибка в моем коде GenericRepository.
Попробуйте переместить код ожидания репозитория в настройку вашего 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();
}