Да, можно надежно запускать методы настройки и завершения до и после любых тестов в наборе тестов. Позвольте мне продемонстрировать в коде:
package com.test;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class})
public class TestSuite {
@BeforeClass
public static void setUp() {
System.out.println("setting up");
}
@AfterClass
public static void tearDown() {
System.out.println("tearing down");
}
}
Итак, ваш класс Test1 будет выглядеть примерно так:
package com.test;
import org.junit.Test;
public class Test1 {
@Test
public void test1() {
System.out.println("test1");
}
}
... и вы можете представить, что Test2 выглядит аналогично. Если вы запустите TestSuite, вы получите:
setting up
test1
test2
tearing down
Таким образом, вы можете видеть, что установка / демонтаж выполняется только до и после всех тестов, соответственно.
Подвох: это работает, только если вы запускаете набор тестов и не запускаете Test1 и Test2 как отдельные тесты JUnit. Вы упомянули, что используете maven, и плагин maven surefire любит запускать тесты индивидуально, а не как часть пакета. В этом случае я бы рекомендовал создать суперкласс, который расширяет каждый тестовый класс. Суперкласс содержит аннотированные методы @BeforeClass и @AfterClass. Хотя этот метод не так чист, как описанный выше, я думаю, он подойдет вам.
Что касается проблемы с неудачными тестами, вы можете установить maven.test.error.ignore, чтобы сборка продолжалась при неудачных тестах. Это не рекомендуется в качестве постоянной практики, но это должно заставить вас работать, пока все ваши тесты не пройдут. Для получения более подробной информации см. Документацию maven верный .