如何使用 flurl 断言请求的响应代码
How to Assert for Response Code for request using flurl
我正试图为我的请求对响应代码进行断言,但我很难弄清楚,你能帮我解决这个问题吗?这是我的实现和定义。
myTests.cs
var accessToken = await helper.SendRequestAsync<AccessToken>(baseUrl, body);
==> 如何在上面的语句之后立即在这里设置断言来验证响应状态?
helpers.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);
}
}
============================================= =========
"AccessToken" 的数据模型在 Dto.cs
中
public class AccessToken
{
public string token_type { get; set; }
public string expires_in { get; set; }
public string ext_expires_in { get; set; }
public string expires_on { get; set; }
public string not_before { get; set; }
public string resource { get; set; }
public string access_token { get; set; }
public string refresh_token { get; set; }
public object Status_Code { get; set; }
}
如果您正在寻找 Flurl's testing features 来帮助解决这个问题,恐怕它不会起作用。这些功能专门用于根据您在测试中设置的 fake 响应来测试客户端代码的行为。看起来您想断言来自 real 调用的状态代码。
我能想到的最好的方法是删除 SendRequestAsync
中的 .ReceiveJson<T>()
行并将方法签名更改为 return 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>();
我正试图为我的请求对响应代码进行断言,但我很难弄清楚,你能帮我解决这个问题吗?这是我的实现和定义。
myTests.cs
var accessToken = await helper.SendRequestAsync<AccessToken>(baseUrl, body);
==> 如何在上面的语句之后立即在这里设置断言来验证响应状态?
helpers.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);
}
}
============================================= =========
"AccessToken" 的数据模型在 Dto.cs
中public class AccessToken
{
public string token_type { get; set; }
public string expires_in { get; set; }
public string ext_expires_in { get; set; }
public string expires_on { get; set; }
public string not_before { get; set; }
public string resource { get; set; }
public string access_token { get; set; }
public string refresh_token { get; set; }
public object Status_Code { get; set; }
}
如果您正在寻找 Flurl's testing features 来帮助解决这个问题,恐怕它不会起作用。这些功能专门用于根据您在测试中设置的 fake 响应来测试客户端代码的行为。看起来您想断言来自 real 调用的状态代码。
我能想到的最好的方法是删除 SendRequestAsync
中的 .ReceiveJson<T>()
行并将方法签名更改为 return 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>();