Ситуация и проблема
У меня есть несколько тестовых классов, каждый из которых имеет несколько методов тестирования. Все тесты используют одну и ту же тестовую базу данных в фоновом режиме. Каждый тестовый класс инициализирует содержимое базы данных, а затем проверяет содержимое в нескольких методах тестирования.
Когда я запускаю каждый тест по отдельности, все они проходят. Но когда я запускаю несколько тестов одновременно (используя maven или мою IDE, IntelliJ), методы разных классов тестов выполняются чередующимися, например. инициализация базы данных второго класса запускается после запуска первого класса, но до того, как все тестовые методы первого класса были запущены, поэтому эти методы потерпят неудачу (поскольку база данных уже содержит данные второго класса).
Некоторые вещи, которые я пробовал, и еще несколько деталей
Простейшим решением было бы заставить бегун TestNG последовательно запускать классы (т.е. дождаться завершения всех тестовых методов тестового класса до запуска методов тестирования другого класса). Это можно сделать?
Возможно, я могу сделать это, указав каждый класс в качестве отдельного теста в моем пакете, но я не хочу этого делать, поскольку это означает, что я должен добавить что-то в пакет, когда добавляю тестовый класс, который неуклюжий и подверженный ошибкам.
Просто попросить TestNG не распараллеливать что-либо (например, установить количество потоков в 1 или отключить параллельный запуск) здесь не помогает, поскольку методы все равно запускаются в неправильном порядке (хотя и не одновременно).
Один из вариантов - использовать другую базу данных для каждого тестового класса, но я не вижу простого способа сделать это (используя JPA и Guice).
В настоящее время я не использую DBUnit, Unitils и т.д.; Я не очень хорошо знаю эти инструменты, но у меня создалось впечатление, что я не решаю свои проблемы.
Я использую JPA для инициализации базы данных в каждом тестовом классе (т.е. создавать объекты сущности и создавать их).