You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET集成测试中HotChocolate的IRequestExecutor Mock身份验证配置问题

问题根因

你使用的微软官方Mock身份验证方案是基于ASP.NET Core中间件管道实现的,仅处理通过HTTP路由进入的请求。直接调用IRequestExecutor执行查询时会绕开整个中间件管道,所以AuthHandler不会触发,身份信息自然也不会流入上下文。

方案1:直接向GraphQL请求注入Mock用户(推荐,性能更高,纯单元测试风格)

你可以直接把构造好的Mock ClaimsPrincipal 传入GraphQL请求的上下文数据中,HotChocolate执行器会直接识别这个用户身份:

[Fact]
public async Task GetJokes()
{
    // 构造Mock用户
    var mockUser = new ClaimsPrincipal(new ClaimsIdentity(new[]
    {
        new Claim(ClaimTypes.NameIdentifier, "test-user-id"),
        new Claim(ClaimTypes.Name, "test-user"),
        // 按需添加你需要的角色、权限Claim
        new Claim(ClaimTypes.Role, "Admin")
    }, "TestAuthentication"));

    var query =
        @"query Jokes {
          jokes(jokeLength: SMALL) {
            nodes {
              id
              body
            }
          }
        }";
    
    var request = QueryRequestBuilder.New()
        .SetQuery(query)
        // 把Mock用户注入到GraphQL上下文,固定键名用HotChocolate预定义的即可
        .SetProperty(HotChocolate.AspNetCore.WellKnownContextData.User, mockUser)
        .Create();
    var executor = await _factory.Services.GetRequestExecutorAsync();
    var result = await executor.ExecuteAsync(request);
    (await result.ToJsonAsync()).MatchSnapshot();
}

如果多个测试都需要Mock用户,可以封装个扩展方法简化调用。

方案2:走HTTP请求管道(复用现有Mock Auth配置)

如果你不想改现有身份验证逻辑,也可以直接用WebApplicationFactory创建的HttpClient发送GraphQL请求,请求会走完整的ASP.NET Core中间件链路,你之前配置的Mock AuthHandler就会正常触发:

[Fact]
public async Task GetJokes()
{
    var client = _factory.CreateClient();
    var query = new
    {
        query = @"query Jokes {
          jokes(jokeLength: SMALL) {
            nodes {
              id
              body
            }
          }
        }"
    };
    var response = await client.PostAsJsonAsync("/graphql", query);
    response.EnsureSuccessStatusCode();
    var result = await response.Content.ReadAsStringAsync();
    result.MatchSnapshot();
}

两种方案都可以满足需求,方案1更适合只测GraphQL业务逻辑的场景,方案2更贴近真实用户调用链路。

内容的提问来源于stack exchange,提问作者Kieran Osgood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:57:01