Подтвердить что ты не робот

Используйте ItExpr.IsNull <TValue>, а не значение нулевого аргумента, поскольку это предотвращает правильный поиск метода

Я пытаюсь написать unit test, где мне нужно настроить защищенный метод. Я использую Moq для этой настройки.

_innerHandler.Protected()
             .Setup<Task<HttpResponseMessage>>("SendAsync", It.IsAny<HttpRequestMessage>(), It.IsAny<CancellationToken>())
             .ReturnsAsync(responseMessage);

Когда эта строка выполняется, она выдает следующее исключение:

System.ArgumentException: используйте ItExpr.IsNull<TValue>, а не значение null аргумента, поскольку оно предотвращает правильный поиск метода.

Когда я меняю его на использование ItExpr.IsNull<TValue>, он позволяет выполнить тест. Тем не менее, это, конечно, отсутствует настройка, которую я хотел настроить.

Что мне нужно сделать, чтобы настроить защищенный метод с помощью It.IsAny<TValue>?

4b9b3361

Ответ 1

При настройке IProtectedMock вы должны использовать Moq.Protected.ItExpr вместо Moq.It.

Вот исправленная реализация того, что я пытался сделать в моем вопросе:

_innerHandler.Protected()
             .Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
             .ReturnsAsync(responseMessage);