Есть ли способ удалить все таблицы или обрезать их внутри тестового контейнера Postgres?JAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Есть ли способ удалить все таблицы или обрезать их внутри тестового контейнера Postgres?

Сообщение Гость »


Я ищу способ сделать мои тесты компонентов автономными. Итак, чтобы добиться такого поведения, в некоторых тестах мне нужно иметь «чистую базу данных» или хотя бы «чистую таблицу». Я все еще не мог найти способ сделать это внутри тестового контейнера. Итак, вот что я пробовал до сих пор: Мой класс настройки контейнера:

публичный класс PostgreSqlTestContainer реализует QuarkusTestResourceLifecycleManager {

public static Final PostgreSQLContainer POSTGRES = new PostgreSQLContainer("postgres:alpine"); @Override общественная Map start() { ПОСТГРЕС.старт(); вернуть some_db_config_as_per_doc; } @Override общественная недействительная остановка () { ПОСТГРЕС.стоп(); } Вот класс тестов:

@QuarkusTest @QuarkusTestResource(PostgreSqlTestContainer.class) класс UserResourcesTest { @Тест сценарий_one(){ // создаем нового пользователя // делаем что-то (@POST.. проверяем HTTP == 201) } @Тест сценарий_два(){ // создаем нового пользователя // делаем что-то (@POST.. проверяем HTTP == 201) (проходим) // ищем всех пользователей в базе данных // делаем больше (@GET.. проверяем HTTP == 200) (проходим) // утверждаем, что найден только 1 пользователь // поскольку сценарий_один не должен мешать сценарию_два (провал) } } Второй сценарий не удался, поскольку некоторые «грязные» данные из первого теста все еще находились в контейнере базы данных. Я пытался остановить/запустить контейнер для каждого теста. (очень, очень медленный процесс, иногда появляется ошибка, и снова очень медленный).

@BeforeEach недействительная настройка() { PostgreSqlTestContainer.POSTGRES.stop(); PostgreSqlTestContainer.POSTGRES.start(); } Также пытался обрезать таблицу/удалить всю базу данных:

@Inject Менеджер сущности Менеджер сущности; @BeforeEach частный недействительный откат() { усечь(); } недействительный усечение () { Запрос NativeQuery =entityManager.createNativeQuery("УДАЛИТЬ БАЗУ ДАННЫХ, ЕСЛИ СУЩЕСТВУЕТ имя_базы_данных"); NativeQuery.executeUpdate(); } Я ищу обходной путь для этой проблемы, я просто хочу каким-то образом использовать @BeforeEach для очистки БД перед каждым тестом. Я имею в виду, что все, что мне нужно, — это чистая среда для каждого теста.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»