我正尝试为我的请求声明响应代码,但是我很难弄清楚,请您帮我一下。这是我的实现和定义。
myTests.cs
~/.yarn/bin
==>如何在上述语句之后立即在此处设置断言以验证响应状态?
helpers.cs
var accessToken = await helper.SendRequestAsync<AccessToken>(baseUrl, body);
================================================ =======
“ AccessToken”的数据模型位于Dto.cs中。
public static async Task<T> SendRequestAsync<T>(string baseUrl, Dictionary<string, string> body)
{
using (var flurl_client = new FlurlClient(baseurl))
{
try
{
var response = await flurl_client
.Request()
.PostUrlEncodedAsync(body)
.ReceiveJson<T>();
return response;
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
return default(T);
}
}
答案 0 :(得分:0)
如果您正在寻找Flurl's testing features来帮助解决此问题,恐怕将无法正常工作。这些功能是专门设计用于根据您在测试中设置的 fake 响应来测试客户端代码的行为的。看来您想通过 real 调用声明状态代码。
我能想到的最好的方法是在.ReceiveJson<T>()
中放下SendRequestAsync
行,并更改方法签名以返回Task<HttpResponseMessage>
:
using System.Net.Http;
public static async Task<HttpResponseMessage> SendRequestAsync(string baseUrl, Dictionary<string, string> body)
{
using (var flurl_client = new FlurlClient(baseurl))
{
try
{
var response = await flurl_client
.Request()
.PostUrlEncodedAsync(body); // this returns Task<HttpResponseMessage>
return response;
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
return null;
}
}
然后您的测试可以做到这一点:
var resp = await Helper.SendRequestAsync(...);
Assert.AreEqual(HttpStatusCode.OK, resp.StatusCode);
任何需要反序列化响应的主体都可以做到这一点:
var token = await Helper.SendRequestAsync(...).ReceiveJson<AccessToken>();