Как издеваться над вложенным интерфейсом?

Я пытаюсь издеваться над интерфейсом 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: соответствующие аргументы

Другие вопросы по тегам