AspNet Core 集成测试,将参数传递给 WebApplicationFactory
AspNet Core Integration test, pass arguments to WebApplicationFactory
我有设计为独立的应用程序 aspnet core webapi
自宿主可执行文件。
要启动可执行文件,必须将配置文件路径作为命令行参数传递(例如 MyServer.exe --config "path-to-config-file"
)
我想通过集成测试对其进行测试(跟随此页面:https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.1)
我的问题 - 如何将命令行参数传递给 WebApplicationFactory
?
谢谢
命令行参数由命令行配置提供程序处理。换句话说,最终结果是您只是在配置根目录中得到这些值,而这正是您稍后访问它们以使用它们的地方。鉴于此,您可以简单地在测试中使用任何配置方式来提供相同的值,甚至直接写入配置。
如果你还没有,你应该 subclass 你的 Startup
class 专门用于测试,例如:
public class TestStartup : Startup
{
public TestStartup(IConfiguration configuration)
: base(configuration)
{
}
}
然后,在您的 TestStartup
构造函数中,您可以在配置中设置适当的值:
configuration["config"] = "path-to-config-file";
请记住 WebApplicationFactory
的类型参数仅用于确定 "entry point",即测试主机将 运行 Program
bootstrap 本身。因此,您应该继续使用 WebApplicationFactory<Startup>
,但随后将您的测试主机配置为使用您的 TestStartup
:
public MyTests(WebApplicationFactory<Startup> factory)
{
factory = factory.WithWebHostBuilder(builder => builder.UseStartup<TestStartup>());
}
将值直接传递给 CommandLineConfigurationProvider:
public class CustomFactory : WebApplicationFactory<Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration(configurationBuilder =>
{
configurationBuilder.AddCommandLine(new string[] { "--config \"path-to-config-file\"" });
});
base.ConfigureWebHost(builder);
}
}
我有设计为独立的应用程序 aspnet core webapi
自宿主可执行文件。
要启动可执行文件,必须将配置文件路径作为命令行参数传递(例如 MyServer.exe --config "path-to-config-file"
)
我想通过集成测试对其进行测试(跟随此页面:https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.1)
我的问题 - 如何将命令行参数传递给 WebApplicationFactory
?
谢谢
命令行参数由命令行配置提供程序处理。换句话说,最终结果是您只是在配置根目录中得到这些值,而这正是您稍后访问它们以使用它们的地方。鉴于此,您可以简单地在测试中使用任何配置方式来提供相同的值,甚至直接写入配置。
如果你还没有,你应该 subclass 你的 Startup
class 专门用于测试,例如:
public class TestStartup : Startup
{
public TestStartup(IConfiguration configuration)
: base(configuration)
{
}
}
然后,在您的 TestStartup
构造函数中,您可以在配置中设置适当的值:
configuration["config"] = "path-to-config-file";
请记住 WebApplicationFactory
的类型参数仅用于确定 "entry point",即测试主机将 运行 Program
bootstrap 本身。因此,您应该继续使用 WebApplicationFactory<Startup>
,但随后将您的测试主机配置为使用您的 TestStartup
:
public MyTests(WebApplicationFactory<Startup> factory)
{
factory = factory.WithWebHostBuilder(builder => builder.UseStartup<TestStartup>());
}
将值直接传递给 CommandLineConfigurationProvider:
public class CustomFactory : WebApplicationFactory<Startup>
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration(configurationBuilder =>
{
configurationBuilder.AddCommandLine(new string[] { "--config \"path-to-config-file\"" });
});
base.ConfigureWebHost(builder);
}
}