Я использую Moq на прошлой неделе или около того, и до сегодняшнего дня не было никаких проблем. У меня проблема с получением VerifyAll()
для правильного соответствия настройке моего макета.
В настоящее время я пишу модульные тесты для API моего приложения. Вот как структурировано приложение:
API <==> Service <==> DAO <==> Database
Имея это в виду, я высмеиваю объект службы, а затем создаю объект API с помощью смоделированной службы. Я уже написал несколько модульных тестов без проблем до сих пор.
У меня есть две переменные экземпляра, подобные этой:
private Api _api;
private Mock<IHibernateService> mockService;
Я инициализирую их в методе установки:
[SetUp]
public void DoSetupTasks()
{
mockService = new Mock<IHibernateService>();
_api = new Api(mockService.Object);
}
Вот неудачный модульный тест:
[Test]
public void TestSearchOnAllProperties()
{
mockService
.Setup(service => service.LoadAll(It.IsAny<Type>()))
.Returns(new DomainBase[0]);
var dmbs = _api.SearchOnAllProperties("search term", typeof(DomainBase));
mockService.VerifyAll();
}
Метод API SearchOnAllProperties()
впоследствии вызовет метод сервиса LoadAll()
(с некоторой дополнительной логикой, конечно), поэтому я хочу убедиться, что он вызывается правильно. Чтобы уточнить, вот как LoadAll()
вызывается в SearchOnAllProperties()
:
public IEnumerable<DomainBase> SearchOnAllProperties(string searchTerm, Type type)
{
foreach (DomainBase dmb in _hibernateService.LoadAll(type))
{
// additional logic
}
}
Однако, когда я запускаю модульное тестирование, я получаю MockVerificationException
о том, что данная настройка не была согласована. Я не могу понять, почему, поскольку это должен быть вызов метода LoadAll()
службы.