如何在 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 库

asp.net core 2.0 web api基于JWT自定义策略授权

Web API 中的多个 JWT 授权令牌

.NET 5 Web API 中的 JWT 授权和刷新令牌

.net Core 3 Web API JWT 未经授权

JWT不记名令牌授权不起作用asp net core web api