这既是一个问题,也是一个答案。我已经解决了我的问题,但似乎有点不对劲。
我最初的问题是在 bitbucket 管道中运行我的 ASP.NET Core 集成测试,原因是System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
一些解决方案要求通过更改某些设置sysctl
,但那就是受位桶限制 https://confluence.atlassian.com/bitbucket/run-docker-commands-in-bitbucket-pipelines-879254331.html#RunDockercommandsinBitbucketPipelines-RunningDockercommands,所以这对我来说不是一个选择。
解决此问题的第二种方法,如中所述这些 stackoverflow 答案 https://stackoverflow.com/questions/45875981/error-while-reading-json-file-in-dotnet-core-the-configured-user-limit-128-on, 就是转reloadOnChange
off.
我现在的新问题是,我们该如何best这样做是为了测试WebApplicationFactory
?
一种对我有用的解决方案(代码量最少)似乎完全是一种黑客行为。我迭代所有JsonConfigurationSource
并设置ReloadOnChange
to false
.
完整解决方案:
public class TestApplicationFactory : WebApplicationFactory<Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration(config =>
{
foreach (var source in config.Sources)
{
if (source is JsonConfigurationSource)
{
var jsonConfigSource = (JsonConfigurationSource) source;
jsonConfigSource.ReloadOnChange = false;
}
}
});
}
}
我还没有尝试过的另一个解决方案可能是覆盖CreateWebHostBuilder() https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.testing.webapplicationfactory-1.createwebhostbuilder?view=aspnetcore-3.0#Microsoft_AspNetCore_Mvc_Testing_WebApplicationFactory_1_CreateWebHostBuilder。然而,似乎有更多的代码和大量的复制和粘贴默认一 https://github.com/dotnet/aspnetcore/blob/v2.2.8/src/DefaultBuilder/src/WebHost.cs.
我错过了什么吗?有一个更好的方法吗?