Есть несколько способов добиться этого.Самый простой и простой способ - создать «тест», который запускается в начале и в конце комплекта, который устанавливает базу данных, а затем устанавливает глобальный флаг.В ваших тестах @Before и @After вы проверяете этот флаг и, если необходимо, выполняете настройку / разрыв.
@RunWith(Suite.class)
@SuiteClasses({SetupTest.class, RealTest.class, TeardownTest.class});
Это простейшее решение, но оно не очень хорошее, поэтому более подходящее решение будетиспользовать TestRule .Посмотрите на расширение ExternalResource .Это реализует логику до и после, которая окружает ваши методы тестирования.Это позволит вам отделить ваши методы @Before и @After, чтобы везде использовать один и тот же код.
Затем, для вашего пакета, вам также необходимо реализовать логику до / после.К сожалению, класс, аннотированный @RunWith (Suite.class), фактически не создается, поэтому вы не можете использовать конструктор этого класса, но вы можете расширить Suite .В зависимости от того, как вы это запустите, вам потребуется реализовать один из конструкторов, используя в качестве примера @RunWith:
public class MySuite extends Suite {
/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError
*/
public MySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
// put your global setup here
// set global variable
}
}
Затем запустите ваш набор тестов с помощью
@RunWith(MySuite.class)
Есть несколько конструкторов, которые используются в разных ситуациях, посмотрите на комментарии рядом с каждым для деталей.Вам все еще нужно использовать глобальную переменную, чтобы ваши правила не выполняли повторно код установки.Вышеприведенное сработает, если вы хотите выполнить только установочный код, выполнение разборки кода сложнее, но это можно сделать.Дайте мне знать, если вам это нужно: -)
Если вы хотите большей гибкости (скажем, выполнение кода установки только для определенных методов), то посмотрите мой ответ на Как определить правило метода JUnit влюкс .