gpt4 book ai didi

c# - 在 C# 中与 Hotchocolate GraphQL 和 TestServer 进行集成测试

转载 作者:行者123 更新时间:2023-12-03 08:10:30 25 4
gpt4 key购买 nike

我有一个带有 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 并重写其中的一些方法,例如数据库配置。使用上面创建的测试服务器,我可以使用返回 HttpClient 对象的 .CreateClient() 方法执行集成测试。通过这个客户端,我可以调用 REST 端点。这工作得很好。

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

最佳答案

由于 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

关于c# - 在 C# 中与 Hotchocolate GraphQL 和 TestServer 进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70996099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com