Flurl Testing: как настроить отклик в зависимости от условий?

У меня есть метод, который делает два HTTP-вызова для двух разных URL-адресов, используя Flurl. Мне нужно провести модульное тестирование этого метода, в котором я хочу, чтобы Flurl отвечал двумя разными ответами. Как я могу настроить это?

Мой тестовый класс выглядит так:

public class SUT
{
    public async Task Mut(object obj)
    {
        var x = await url1.PostJsonAsync(obj).ReceiveJson();

        if ((bool)x.property = true)
        {
            var y = await url2.GetJsonAsync();
            // Process y.
        }
    }
}

У меня есть тестовый класс, как показано ниже:

public class TestSut : Disposable
{
    private readonly HttpTest httpTest;

    public TestSut()
    {
        httpTest = new HttpTest();
    }

    [Fact]
    public async Task TestMut()
    {
        // call Mut...
    }

    public void Dispose()
    {
       httpTest?.Dispose();
    }
}

То, что я хотел бы, это что-то вроде строк:

httpTest.ForUrl(url1).ResponsdWithJson(...);
httpTest.ForUrl(url2).ResponsdWithJson(...);

person kovac    schedule 05.12.2019    source источник
comment
В настоящее время нет, но я планирую осветить этот сценарий в версии 3.0, а также полностью отказаться от имитации определенных вызовов. Следите за этой задачей, я планирую поработать над ней в ближайшее время.   -  person Todd Menier    schedule 06.12.2019


Ответы (1)


Короткий ответ: нет, сегодня вы не можете настроить другое поведение по URL-адресу, но оно появится в версии 3.0. Я обновлю это, когда оно будет выпущено (или, надеюсь, кто-то другой, если я забуду :).

Однако в этом конкретном случае, предполагая, что ваш код SUT хотя бы немного напоминает реальный код, на который вы ориентируетесь, похоже, что url1 всегда будет вызываться перед url2, поэтому, если вы просто ставите ответы в очередь в том же порядке, Flurl гарантирует, что они возвращаются в том же порядке.

httpTest
    .ResponsdWithJson(/* fake response for url1 */)
    .ResponsdWithJson(/* fake response for url2 */);

Конечно, SUT может на самом деле не вызывать вещи в определенном порядке, и в этом случае вам, к сожалению, придется ждать 3.0.

person Todd Menier    schedule 05.12.2019
comment
Спасибо за ответ. Тогда оставлю это открытым на данный момент. - person kovac; 06.12.2019