Ответ 1
если вы хотите запустить сервер OWIN один раз для всех тестов.
- объявить базовый класс для всех ваших тестовых классов
- объявить приватную переменную readonly в базовом классе для сервера OWIN.
private static readonly TestServer _webServer = TestServer.Create<Startup>();
- объявить защищенную статическую переменную, чтобы открыть этот сервер для всех тестов.
protected static TestServer WebServer { get { return _webServer; } }
это должно решить вашу проблему создания веб-сервера только один раз для всех тестовых запусков. и если вы не хотите инициализировать веб-сервер так рано, вы можете использовать ленивое создание экземпляра и т.д., но дело в том, чтобы сделать его статическим и инициализировать его во время определения, так что оно будет однократно на домен приложения.
как для получения доступа к HttpConfiguration в ваших модульных тестах.. вот один из возможных способов.
- в вашем Startup.cs, объявите публичное свойство...
public static HttpConfiguration HttpConfiguration { get; private set; }
-
инициализировать эту переменную в методе configure для класса Startup.cs.
HttpConfiguration = new HttpConfiguration(); HttpConfiguration.MapHttpAttributeRoutes(); // do more stuff.. setting resolver etc. // and then finally app.UseWebApi(HttpConfiguration);
-
Это свойство HttpConfiguration является вашей конфигурацией веб-api, и поскольку мы сделали это общедоступным, оно должно быть доступно в вашем тестовом проекте и во всех тестах.
Startup.HttpConfiguration
вы можете получить к нему доступ, чтобы изменить определения именования зависимостей и т.д.
Startup.HttpConfiguration.DependencyResolver
обратите внимание, что вы можете обновлять определения DependencyResolver даже после инициализации веб-сервера... обновленные определения будут по-прежнему иметь эффект.
- если вы обеспокоены тем, что ваша HttpConfiguration просто общедоступна, затем сделайте класс Startup внутренним и сделайте его видимым только для вашего проекта unit test.