Удалить тестовую базу данных после выполнения тестов API - PullRequest
0 голосов
/ 02 мая 2019

Для приложения, над которым я работаю, у меня есть набор 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}), но я бы предпочел параллельное выполнение.

...