自托管MVC6应用程序

时间:2015-09-12 01:24:11

标签: owin asp.net-core asp.net-core-mvc

我试图让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();
    }
}

2 个答案:

答案 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>()); 

应用程序的名称在哪里。必须在测试工具中引用该应用程序