Flurl & xUnit не перехватывает исключение с помощью await - PullRequest
0 голосов
/ 22 января 2019

Я настраиваю потребителя для WebAPI и пишу некоторые модульные тесты. «Акт» часть моего теста выглядит следующим образом:

var dta = await service.AuthenticateAsync(customerId, userName, password, machineId);           

try
{
    service.AuthenticateAsync(customerId, userName, password, machineId).Wait();
}
catch (AggregateException ex)
{
    exUnauthorized = ex;
}
try
{
    httpTest.SimulateTimeout();
    await service.AuthenticateAsync(customerId, userName, password, machineId);
 }
 catch (AggregateException ex)
 {
     exTimeout = ex;
 }

Я настроил Flurl HttpTest следующим образом:

httpTest.RespondWithJson(auth)
                .RespondWith(status: (int)HttpStatusCode.Unauthorized);

Для получения первого ответа об успехе и второго от несанкционированного. Как вы можете видеть позже в коде, я установил тайм-аут для проверки этого (если я установил его изначально, кажется, что время ожидания для всех запросов истекло).

Первый вызов успешен. Второй вызов, где я использую Wait() в блоке try, работает и перехватывает статистическое исключение. Второй вызов, где я использую await, не перехватывает исключение; он не проходит модульное тестирование за исключением исключения, вызванного методом.

Чего мне не хватает? Почему ожидание звонка не работает правильно?

1 Ответ

0 голосов
/ 27 января 2019

await не переносит исключения в AggregateException, так как он предназначен для использования в асинхронном коде.Wait() и Result обертывают базовые исключения в AggregateException, так как они предназначены для использования в параллельном коде.

Технически это не то, что await разворачивает исключение;это просто не переносит это как Wait / Result делает.

...