如何在测试库中创建和运行Webhost?

时间:2019-02-11 15:47:31

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

我目前正在开发一个非常简单的测试库。该解决方案还包含一个ASP.NET Core Webhost,它可以处理简单的CRUD操作。 我想对这个ASP.NET Core应用程序进行单元测试,而不必总是启动两个项目,所以我要在NUNit测试库中创建一个新的WebHostBuilder。

[OneTimeSetUp]
public void SetupHost()
{
    var webhostBuilder = new WebHostBuilder()
        .UseKestrel()
        .UseIISIntegration()
        .UseContentRoot("root")
        .UseStartup(typeof(Startup))
        .ConfigureAppConfiguration((builderContext, config) =>
        {
            config.AddJsonFile("config1", false);
            config.AddJsonFile("config2", false);
        });

    webhostBuilder
        .Build()
        .Run();
}

问题在于SetupHost()永远不会完成,因为Run()会阻塞线程,直到主机关闭。

如何启动新的虚拟主机,然后成功启动我的单元测试?

1 个答案:

答案 0 :(得分:1)

按住IWebHost并改用Start

IWebHost host;

[OneTimeSetUp]
public void SetupHost() {
    var webhostBuilder = new WebHostBuilder()
        .UseKestrel()
        .UseIISIntegration()
        .UseContentRoot("root")
        .UseStartup(typeof(Startup))
        .ConfigureAppConfiguration((builderContext, config) =>
        {
            config.AddJsonFile("config1", false);
            config.AddJsonFile("config2", false);
        });

    host = webhostBuilder.Build();

    host.Start(); //Starts listening on the configured addresses.
}

稍后,调用StopAsync尝试正常关闭主机。