AspNet核心集成测试,将参数传递给WebApplicationFactory

时间:2018-07-09 09:06:48

标签: c# asp.net-core integration-testing

我有设计为独立的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

谢谢

1 个答案:

答案 0 :(得分:7)

命令行参数由命令行配置提供程序处理。换句话说,最终结果是您只需要在配置根目录中获得这些值,就可以在以后使用它们来访问它们。鉴于此,您可以简单地使用测试中的任何配置方法来提供相同的值,甚至可以直接写入配置中。

如果还没有,则应该将Startup类专门用于测试,例如:

public class TestStartup : Startup
{
    public TestStartup(IConfiguration configuration)
        : base(configuration)
    {

    }
}

然后,在TestStartup构造函数中,您可以在配置中设置适当的值:

configuration["config"] = "path-to-config-file";

请记住,WebApplicationFactory的类型参数仅用于确定“入口点”,即测试主机将运行哪个Program来进行自我引导。因此,您应该继续使用WebApplicationFactory<Startup>,但是将测试主机配置为使用TestStartup

public MyTests(WebApplicationFactory<Startup> factory)
{
    factory = factory.WithWebHostBuilder(builder => builder.UseStartup<TestStartup>());
}