2016-10-19 5 views
2

Я пишу интеграционные тесты для своего веб-приложения ASP.Net, поэтому я хочу начать его и проверить на HTTP-запрос/уровень ответа.Как запустить приложение ASP.Net без хостинга?

Поскольку тесты должны выполняться одновременно и с минимальными разрешениями, я не хочу раскрывать их на каком-либо реальном HTTP-порту.

Я читал, что OWIN считается интерфейсом между приложениями ASP.Net и веб-серверами.

У меня есть идея использовать какой-то макет веб-серверного объекта, который использует OWIN для размещения приложения ASP.Net и не предоставляет его на каких-либо HTTP-портах. Вместо этого объект веб-сервера должен принимать HTTP-запросы, вызывая его методы, передает их в приложение, которое оно размещает, и перенаправляет ответ вызывающему.

Есть ли существующие решения?

+1

Вы можете разместить IIS на одном из своих серверов, настольных компьютеров или ноутбуков? Если это так, вы можете разместить его локально за пределами визуальной студии. –

+0

Вам не нужно использовать IIS или другой процесс хостинга. Вы можете высмеивать все, включая HTTP-контекст. –

+0

@SimonPrice да. Другим вариантом является использование автономного хоста OWIN. Однако это приводит к штрафам за производительность и становится проблемой в случае параллельного запуска нескольких тестов. –

ответ

1

Благодаря dawidr я нашел подобный способ для тех, кто использует ASP.Net MVC/Web API - Microsoft.Owin.Testing:

using (var server = TestServer.Create<Startup>()) 
    server.HttpClient.GetAsync("api/ControllerName") 
     .Result.EnsureSuccessStatusCode(); 

Идя этим путем, можно трудоустроить (и тест) Startup объект Owin в, используемый в сценарий реального хостинга.

1

Если вы используете .NET Сердечник тогда я, что здесь вы найдете полезную информацию'S: https://docs.asp.net/en/latest/testing/integration-testing.html

Вот пример того, как можно настроить тестовый сервер:

public static void Main(string[] args) 
{ 
    var contentRoot = Directory.GetCurrentDirectory(); 

    var config = new ConfigurationBuilder() 
     .SetBasePath(contentRoot) 
     .AddJsonFile("hosting.json", optional: true) 
     .Build(); 

    //WebHostBuilder is required to build the server. We are configurion all of the properties on it 
    var hostBuilder = new WebHostBuilder() 

    //Server 
    .UseKestrel() 

    //URL's 
    .UseUrls("http://localhost:6000") 

    //Content root - in this example it will be our current directory 
    .UseContentRoot(contentRoot) 

    //Web root - by the default it's wwwroot but here is the place where you can change it 
    //.UseWebRoot("wwwroot") 

    //Startup 
    .UseStartup<Startup>() 

    //Environment 
    .UseEnvironment("Development") 

    //Configuration - here we are reading host settings form configuration, we can put some of the server 
    //setting into hosting.json file and read them from there 
    .UseConfiguration(config); 

    //Build the host 
    var host = hostBuilder.Build(); 

    //Let's start listening for requests 
    host.Run(); 
} 

Как вы можете видеть вас может повторно использовать существующий класс Startup.cs.

+0

Получено это исключение: «Открытый метод с именем« ConfigureProduction »или« Configure »не найден в« Тип FxPro.WebTrader.Middleware.Web.Startup ». По-видимому, 'UseStartup' работает с' Microsoft.AspNetCore.Builder.IApplicationBuilder', а не 'Owin.IAppBuilder'. –

+0

Мой проект находится в ASP.Net MVC, поэтому этот подход не может быть использован. В любом случае, вы помогли мне найти подходящий вариант (см. Мой ответ), спасибо большое! –

Смежные вопросы