2016-08-26 3 views
11

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

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

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

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

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

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

ответ

14

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

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

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