【发布时间】:2022-01-25 06:42:01
【问题描述】:
我们正在使用 SpecFlow 为 .net-core-3.1 WebApplication 编写集成测试。我们的网络应用程序包含一个用于订阅 Kafka 的 BackgroundService。此 BackgroundService 的存在会阻止 WebApplicationFactory.CreateClient 方法完成。我读到有人在资源有限的测试环境中遇到类似问题,但这种情况在现代笔记本电脑上发生在我们身上。
我们的测试类的构造函数:
public PocServiceSteps(ScenarioContext context)
{
_context = context;
_factory = new WebApplicationFactory<Startup>()
.WithWebHostBuilder(builder => builder.ConfigureServices(services =>
{
// setup any required services changes here
}));
// this method never completes
_client = _factory.CreateClient(
new WebApplicationFactoryClientOptions
{
BaseAddress = new Uri($"http://localhost:5000/")
}
);
}
我们尝试过的一件事是根据 https://www.strathweb.com/2021/05/the-curious-case-of-asp-net-core-integration-test-deadlock/ 覆盖 WebApplicationFactory,但这并不能解决问题:
private class AsyncFriendlyWebApplicationFactory<T> : WebApplicationFactory<T> where T : class
{
protected override IHost CreateHost(IHostBuilder builder)
{
var host = builder.Build();
Task.Run(() => host.StartAsync()).GetAwaiter().GetResult();
return host;
}
}
【问题讨论】:
-
请edit 您的问题包括当您说“此BackgroundService 的存在阻止WebApplicationFactory.CreateClient 方法完成。”时的含义。您是否遇到异常?如果是这样,错误消息和堆栈跟踪是什么。如果您没有收到错误,那么行为究竟是什么?该方法是否只是挂起并且永不返回?
标签: c# integration-testing asp.net-core-3.1 specflow