【问题标题】:Flurl Testing: How to setup response based on conditions?Flurl 测试:如何根据条件设置响应?
【发布时间】:2019-12-05 08:20:33
【问题描述】:

我有一个方法可以使用 Flurl 对两个不同的 url 进行两次 HTTP 调用。我需要对这种方法进行单元测试,我希望 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(...);

【问题讨论】:

  • 目前没有,但我计划在 3.0 中涵盖此场景,同时选择加入/退出模拟特定调用。关注this issue,我打算尽快投入工作。

标签: c# flurl


【解决方案1】:

简短的回答是否定的,您今天不能通过 URL 配置不同的行为,但它会在 3.0 中出现。我会在它发布时更新它(或者如果我忘记了希望其他人会更新它:)。

在这种特殊情况下,假设您的 SUT 代码至少在某种程度上类似于您所针对的真实代码,看起来 url1 将始终在 url2 之前被调用,因此如果您只是以相同的顺序排列响应,Flurl 将保证它们以相同的顺序返回。

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

当然,SUT 实际上可能不会以这样的确定顺序调用事物,在这种情况下,不幸的是您将不得不等待 3.0。

【讨论】:

  • 感谢您的回答。暂时将其保持打开状态。
猜你喜欢
  • 1970-01-01
  • 2019-09-06
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多