我们正在使用SpecFlow为.net-core-3.1 WebApplication编写集成测试。我们的网络应用程序包括一个用于订阅卡夫卡的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/的https://www.strathweb.com/2021/05/the-curious-case-of-asp-net-core-integration-test-deadlock/,但这并不能解决问题:
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;
}
}发布于 2022-01-19 11:09:19
如果测试不需要后台服务,只需删除它:
var factory = new WebApplicationFactory<Startup>()
.WithWebHostBuilder(builder =>
builder.ConfigureTestServices(s =>
{
var descriptor = s.SingleOrDefault(
d => d.ImplementationType ==
typeof(MyBackgroundService));
s.Remove(descriptor);
})
);如果您像这样在Startup.cs中注册了您的服务:
builder.Services.AddHostedService<MyBackgroundService>();https://stackoverflow.com/questions/70476179
复制相似问题