Во время модульного тестирования GetAsync, как заставить HttpResponseMessage возвращать исключение, которое будет перехв ⇐ C#

Место общения программистов C#
Anonymous
Во время модульного тестирования GetAsync, как заставить HttpResponseMessage возвращать исключение, которое будет перехв

Сообщение Anonymous »

Я провожу модульное тестирование кода, похожего на приведенный ниже. Есть один вариант использования, когда я хочу, чтобы GetAsync выдавал исключение, которое перехватывалось бы в блоке catch.

Код: Выделить всё

try
{
var response = await client.GetAsync(url, cancellationToken);
}
catch(Exception e)
{
_logger.LogError(e)
}
Я высмеиваю HttpClient

Код: Выделить всё

var factory = new Mock();

var httpClient = new HttpClient(handler)
{
BaseAddress = new Uri("http://localhost:7100")
}

factory.Setup(_ => _.CreateClient(It.IsAny()))
.Returns(httpClient)
.Verifiable();
Здесь я высмеиваю HttpMessageHandler

Код: Выделить всё

var handler = new Mock();
handler
.Protected()
.Setup(
"SendAsync",
ItExpr.IsAny(),
ItExpr.IsAny()
)
.Returns(GetHttpResponseMessage())
.Verifiable();
GetHttpResponseMessage() — это метод, в котором я помещаю логику для возврата соответствующего HttpResponseMassage.

Код: Выделить всё

HttpResponseMessage GetHttpResponseMessage(int code)
{
if(code == 200)
{
return new HttpResponseMessage{ StatusCode = HttpStatusCode.OK };

}
else if(code == 500)
{
//StatusCode.InternalServerError   ???
//throw new Exception() ???
}
}
Ни один из двух вышеперечисленных не работает. Ни один из них не приводит к перехвату исключения блоком catch.
Спасибо за помощь

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-an-excep

Вернуться в «C#»