Flurl 测试:如何根据条件设置响应?
Flurl Testing: How to setup response based on conditions?
我有一个方法可以使用 Flurl 对两个不同的 url 进行两次 HTTP 调用。我需要对该方法进行单元测试,我希望 Flurl 在其中以两种不同的响应进行响应。我该如何设置?
我的测试 class 是这样的:
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.
}
}
}
我有一个测试 class 如下:
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(...);
简短的回答是否定的,您今天无法通过 URL 配置不同的行为,但它会在 3.0 中推出。当它发布时我会更新它(或者如果我忘记了,希望其他人会更新 :)。
虽然在这种特殊情况下,假设您的 SUT 代码至少有点类似于您要定位的真实代码,看起来 url1 将始终在 url2 之前被调用,因此如果您只是以相同的顺序对响应进行排队, Flurl 将保证它们以相同的顺序返回。
httpTest
.ResponsdWithJson(/* fake response for url1 */)
.ResponsdWithJson(/* fake response for url2 */);
当然,SUT 实际上可能不会像那样以确定的顺序调用事物,在这种情况下,不幸的是,您将不得不等待 3.0。
我有一个方法可以使用 Flurl 对两个不同的 url 进行两次 HTTP 调用。我需要对该方法进行单元测试,我希望 Flurl 在其中以两种不同的响应进行响应。我该如何设置?
我的测试 class 是这样的:
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.
}
}
}
我有一个测试 class 如下:
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(...);
简短的回答是否定的,您今天无法通过 URL 配置不同的行为,但它会在 3.0 中推出。当它发布时我会更新它(或者如果我忘记了,希望其他人会更新 :)。
虽然在这种特殊情况下,假设您的 SUT 代码至少有点类似于您要定位的真实代码,看起来 url1 将始终在 url2 之前被调用,因此如果您只是以相同的顺序对响应进行排队, Flurl 将保证它们以相同的顺序返回。
httpTest
.ResponsdWithJson(/* fake response for url1 */)
.ResponsdWithJson(/* fake response for url2 */);
当然,SUT 实际上可能不会像那样以确定的顺序调用事物,在这种情况下,不幸的是,您将不得不等待 3.0。