0

我有一个带有 REST 和 GraphQL 端点的 ASP.NET Core Api (.NET 6.0)。GraphQL 端点是用 Hotchocolate (12.6.0) 实现的。

为了测试 REST 端点,我创建了一个TestServer这样的:

protected static async Task<TestServer> CreateServer()
{
     IHostBuilder webHostBuilder = new HostBuilder();
     webHostBuilder.UseContentRoot(Directory.GetCurrentDirectory());

     webHostBuilder.ConfigureWebHost(webBuilder =>
          {
               webBuilder
                    .UseTestServer()
                    .UseEnvironment("Test")
                    .ConfigureAppConfiguration((_, config) =>    
                         config.AddJsonFile("appsettings.Test.json"))
                    .UseStartup<AuthenticatedTestStartup>();
           });

     IHost host = await webHostBuilder.StartAsync();
     return host.GetTestServer();
}

AuthenticatedTestStartup派生Startup并覆盖那里的一些方法,例如数据库配置。使用上面创建的测试服务器,我可以使用.CreateClient()返回HttpClient对象的方法执行集成测试。有了这个客户端,我可以调用 REST 端点。这工作得很好。

我现在的问题是:有没有办法使用这个测试服务器对 GraphQL 端点进行集成测试,如果是:如何?如果不是:针对测试数据库以编程方式测试 GraphQL 端点的替代方法是什么?

4

1 回答 1

1

由于 GraphQL 是基于 HTTP 的服务器,因此您可以像普通 REST 端点一样测试它。

但是,如果您的测试不需要 HTTP,我建议您使用内存服务器,因为它更快。

// arrange
var executor = await new ServiceCollection()
    .AddGraphQLServer()
    .AddQueryType<Query>()
    .BuildRequestExecutorAsync();

// act
var query = QueryRequestBuilder.New()
  .SetQuery("{ foo }")
  // you can also add a test principal if you want to test authorised
  // resolvers
  .AddProperty(nameof(ClaimsPrincipal), CreatePrincipal())
  .Create()
var result = executor.ExecuteAsync(query);

// assert
// assert here
于 2022-02-06T11:38:45.500 回答