【问题标题】:AspNet Core Integration test, pass arguments to WebApplicationFactoryAspNet Core Integration 测试,将参数传递给 WebApplicationFactory
【发布时间】:2018-07-09 09:06:48
【问题描述】:

我的应用程序设计为独立的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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    如果您还没有,您应该将您的 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>());
    }
    

    【讨论】:

    • 然后如何从基础启动 ovverdie ConfigureServices 不改变基础启动?
    猜你喜欢
    • 2021-05-25
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多