如何在 jwt 授权的 web api 上执行 XUnit 测试?
Posted
技术标签:
【中文标题】如何在 jwt 授权的 web api 上执行 XUnit 测试?【英文标题】:How to perform XUnit test on a jwt authorised web api? 【发布时间】:2021-06-12 09:26:50 【问题描述】:我必须在具有授权属性的 api 控制器上执行 xunit 测试。 API 使用 JWT Bearer 令牌授权进行保护。所以要对 API 进行单元测试,我尝试了以下代码:
private async Task<string> GetToken(string username, string password)
var user = new User
UserName = username,
Password = password
;
var res = await _client.PostAsJsonAsync("api/validate", user);
if (!res.IsSuccessStatusCode) return null;
var userModel = await res.Content.ReadAsAsync<User>();
return userModel?.Token;
然后尝试在单元测试中调用这个GetToken方法。
string token = await GetToken("user1", "password");
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
但它给出了错误信息 System.ArgumentNullException :字符串引用未设置为字符串的实例。 (参数's')
有没有其他方法可以在 jwt 授权的 web api 上实现 xunit 测试。
【问题讨论】:
如果您在 Controller 方法上设置单元测试,则无需担心 Controller 或 Action 上的授权过滤器。你能发布你的控制器方法的代码吗? @dj101,您的 API 的实际客户端如何访问它? 【参考方案1】:有点晚了,但在
var userModel = await res.Content.ReadAsAsync<User>();
ReadAsAsync
必须是ReadAsStringAsync
【讨论】:
以上是关于如何在 jwt 授权的 web api 上执行 XUnit 测试?的主要内容,如果未能解决你的问题,请参考以下文章
如何实现身份验证和授权 WEB API 2 .NET 应用程序?尝试 JWT 库