我试图让MVC6应用程序自我托管以进行测试。我可以使用TestServer进行内存测试,但是为了测试多个Web应用程序的集成,其中一个包含一个我无法控制的中间件连接到另一个应用程序,我需要至少有一个应用程序可以访问TCP。
我已尝试使用WebApp.Start
,但它适用于IAppBuilder
而不是IApplicationBuilder
,因此我无法使用我的初创公司。
有没有办法让MVC6应用程序通过OWIN或任何其他方式在xUnit测试中自托管?
更新
FWIW,基于Pinpoint的答案和一些额外的研究,我能够提出以下在xUnit中工作的基类,至少当测试与MVC项目在同一个项目中时: / p>
public class WebTestBase : IDisposable
{
private IDisposable webHost;
public WebTestBase()
{
var env = CallContextServiceLocator.Locator.ServiceProvider.GetRequiredService<IApplicationEnvironment>();
var builder = new ConfigurationBuilder(env.ApplicationBasePath)
.AddIniFile("hosting.ini");
var config = builder.Build();
webHost = new WebHostBuilder(CallContextServiceLocator.Locator.ServiceProvider, config)
.UseEnvironment("Development")
.UseServer("Microsoft.AspNet.Server.WebListener")
.Build()
.Start();
}
public void Dispose()
{
webHost.Dispose();
}
}
答案 0 :(得分:1)
Katana的WebApp
静态类已被WebHostBuilder
取代,提供了更加灵活的方法:https://github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNet.Hosting/WebHostBuilder.cs。
您可能已经在没有意识到的情况下使用过这个API,因为它是您在project.json中注册新的web命令时使用的主机块所使用的组件(例如Microsoft.AspNet.Hosting server=Microsoft.AspNet.Server.WebListener server.urls=http://localhost:54540
)并使用{{ 1}}(例如dnx
):
dnx . web
https://github.com/aspnet/Hosting/blob/dev/src/Microsoft.AspNet.Hosting/Program.cs
答案 1 :(得分:0)
您可以使用Microsoft.AspNet.TestHost
有关使用的详细信息,请参阅http://www.strathweb.com/2015/05/integration-testing-asp-net-5-asp-net-mvc-6-applications/。
TestHost可以使用像
这样的行来启动你的创业公司 TestServer dataServer = new TestServer(TestServer.CreateBuilder().UseStartup<WebData.Startup>());
应用程序的名称在哪里。必须在测试工具中引用该应用程序