Как издеваться над вложенным интерфейсом?
Я пытаюсь издеваться над интерфейсом IUnitOfWork
Mock<IUnitOfWork> mock = new Mock<IUnitOfWork>();
интерфейс IUnitOfWork содержит другие интерфейсы. так что я хочу макетировать функцию внутри интерфейса клиента внутри IUintOfWork
mock.Setup(s => s.Customer.GetActiveCustomerByIdCard("lala"))
.Returns(new Customer());
Я сдаю макет. Объект в тестируемом классе
var manager = new CustomerManager(mock.Object);
var res = manager.AddNewCustomer(new Customer());
моя проблема в том, что фиктивная функция возвращает ноль
var customer = _unitOfWork.Customer.GetActiveCustomerByIdCard(idCard);
когда я отлаживаю тест, я вижу макет в классе CustomerManager, но функция возвращает ноль
1 ответ
Решение
Скорее всего, установка использует значение, отличное от того, которое используется при вызове макета.
использование It.IsAny<string>()
игнорировать значение параметра
mock
.Setup(s => s.Customer.GetActiveCustomerByIdCard(It.IsAny<string>()))
.Returns(new Customer());
Справочник Moq Quickstart: соответствующие аргументы