Невозможно использовать параметры конструктора с внедрением зависимостей в asp.net основной тест

#asp.net-core #dependency-injection #integration-testing

Вопрос:

Я использую класс WebHostBuilder для настройки сервера для интеграционных тестов в asp.net ядро. Хотя это работает как заклинание, теперь я столкнулся с проблемами со службами, у которых есть параметр конструктора наряду с другими зависимостями. Эти службы зарегистрированы в моем запуске по следующей схеме:

         services.AddSingleton<MyInterface, MyClass>(x =>
            new MyClass(x.GetRequiredService<SomeInterfaceDependency>(),
                        x.GetRequiredService<AnotherInterfaceDependency>(),
                        someStringOrEnumOrWhateverParameter));
 

Когда я запускаю тесты, мои запросы, использующие эту службу, завершаются неудачно, и я даже не понимаю, в какой момент запрос завершается неудачно. Диагностическая информация, которую я получаю, ограничена трассировкой стека в одну строку:

     ThreadOperations.ExecuteWithAbortSafety(Action action)
 

Итак, мой вопрос: как я могу работать со службами, у которых есть параметры конструктора в интеграционных тестах? Любые указатели в правильном направлении очень ценятся. Спасибо.

Ответ №1:

Вам не следует создавать WebHostBuilder s вручную, вместо этого используйте Microsoft.AspNetCore.Mvc.Testing пакет, его TestServer и WebApplicationFactory классы, которые делают все это за вас, как описано в MSDN:

https://docs.microsoft.com/aspnet/core/test/integration-tests?view=aspnetcore-5.0#aspnet-core-integration-tests