Я бы хотел протестировать некоторые классы, которые являются частью проекта ASP.NET Web Api. Мне не нужны тесты интеграции запросов и ответов через TestServer (хотя они приятные), но я хочу, чтобы мои тесты были как можно ближе к "реальной вещи". Поэтому я хочу разрешить свои классы с помощью сервисов, добавленных в Startup, но меняя некоторые из них на заглушки/макеты на тестовой основе (некоторые тесты нуждаются в mocks, другие - нет).
Это было очень легко сделать в старые добрые времена, когда ASP.NET не имел внутренней среды инъекций инъекций. Поэтому я бы просто вызвал класс, который регистрирует все зависимости для контейнера, а затем создает дочерний контейнер для каждого теста, меняет некоторые зависимости на издевку и что он.
Я попробовал что-то вроде этого:
var host = A.Fake<IHostingEnvironment>();
var startup = new Startup(host);
var services = new ServiceCollection();
//Add stubs here
startup.ConfigureServices(services);
var provider = services.BuildServiceProvider();
provider.GetService<IClientsHandler>();
Кажется, что это работает, но я не хочу создавать всю инфраструктуру запуска для каждого теста. Я хотел бы создать его один раз, а затем создать "дочерний контейнер" или "область содержимого" для каждого теста. Является ли это возможным? В основном я ищу способ изменить услуги за пределами Startup.