我目前正在开发一个非常简单的测试库。该解决方案还包含一个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()
会阻塞线程,直到主机关闭。
如何启动新的虚拟主机,然后成功启动我的单元测试?
答案 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
尝试正常关闭主机。