Для приложения, над которым я работаю, у меня есть набор API-тестов, запускающих веб-приложение с использованием TestServer . Вот настройки.
Я хочу удалить созданную тестом БД после ее запуска.
Чтобы иметь разные имена БД, позволяющие параллельно выполнять тесты с использованием разных БД, {id} строки соединения (Data Source=Sppd.TeamTuner-TEST-API-{id}.db
) заменяется случайной строкой длиной 8.
Обратите внимание, что у меня нет доступа к WebHost
, но только к API из тестов API.
Чтобы разрешить вышесказанное, я реализовал:
- Регистрация
IApplicationLifetime.ApplicationStopping.Register
- Распространение события на соответствующие компоненты
Проблема в том, что метод, зарегистрированный в IApplicationLifetime.ApplicationStopping.Register
, никогда не вызывается.
После долгих чтений я немного запутался в том, что должно работать, а что нет, в основном из-за этого двухлетнего комментария о том, что IIS express не запускает события завершения работы (это все еще верно ?)
Полный пример изменений и воспроизводимости доступен в этом PR . Чтобы воспроизвести проблему, можно запустить любой тест API.
Вопрос : Как удалить БД после выполнения теста?
Функциональный обходной путь - отключить параллельное выполнение тестов для API-тестов с использованием [assembly: CollectionBehavior(DisableTestParallelization = true)]
и использовать постоянное имя БД в строке подключения (без динамической замены {id}), но я бы предпочел параллельное выполнение.