Как имитировать более длительное время отклика (а не тайм-аут) с помощью HttpTest (flurl)

Я хочу настроить HttpTest для имитации тестов с медленным откликом; например, подождите X секунд, прежде чем ответить настроенным RespondWith* ответом. Какие-либо предложения?


person reaz    schedule 28.08.2020    source источник
comment
пояснение - я пишу модульные тесты с помощью flurl - HttpTest. Я вижу примеры того, как настраивать фиктивные ответы; и тайм-аут. Я хочу смоделировать медленный отклик, как будто я все еще хочу получить 200 после ожидания 2 секунд или около того.   -  person reaz    schedule 28.08.2020


Ответы (1)


Это напрямую не поддерживается. Модульные тесты должны быть быстрыми (SimulateTimeout выдает FlurlHttpTimeoutException сразу, а не делает паузу), но я думаю, я мог бы увидеть, что это полезно в каком-то интеграционном тесте.

Есть один способ сделать это. Есть низкоуровневая перегрузка RespondWith, которая требует функции компоновщика. Вы можете добавить здесь паузу, хотя она не поддерживает асинхронность, поэтому я бы предложил Thread.Sleep вместо Task.Delay. (Не идеально, но, честно говоря, он не был разработан с учетом этого варианта использования.)

Что-то вроде этого в вашей настройке должно сделать это:

httpTest.RespondWith(() => {
    // pause for 1 second
    Thread.Sleep(1000);
    return new StringContent("ok");
});
person Todd Menier    schedule 05.09.2020
comment
Спасибо. это должно работать; и ваш комментарий о каком-то особом сценарии типа интеграции - это именно то, для чего он будет использоваться - person reaz; 07.09.2020
comment
мои извинения - кажется, я заговорил слишком рано; Я не вижу перегрузки RespondWith, которая требует Func<>. Я использую flurl.http \ 2.4.2. Что мне не хватает? - person reaz; 09.09.2020
comment
Извините, пропустил ваш последний комментарий. Это версия 3.0, которая находится на стадии предварительного выпуска, но стабильна. Конкретное улучшение упоминается здесь. - person Todd Menier; 30.09.2020