Я хочу запустить мои существующие тесты два раза, один раз с уровнем журнала, установленным на TRACE, и один раз с уровнем журнала, установленным на ERROR. Чтобы добиться этого, я попытался использовать набор тестов и добавил метод, который я пометил @Before
.
Сама кодовая база записывается с помощью Spring Boot, а регистратор по умолчанию настроен на уровень протокола TRACE, поэтому при обычном выполнении теста используется уровень протокола TRACE, который подходит для первого запуска.
Для запуска с набором, где все тесты настраиваются во второй раз, я ожидал, что аннотированный метод @Before
будет вызываться перед каждым выполненным тестом, но это не так.
Единственный эффект, который я мог видеть, это когда я звоню @BeforeClass
, тогда он вызывается один раз. Так как каждый тест запускает контекст Spring с нуля, мой переопределенный уровень Log используется только при первом выполнении теста.
Вот мой набор тестов, есть идеи для этого?
@RunWith(ParallelSuite.class)
@SuiteClasses("**/*Test.class")
@Log4j2
public class TestSuiteWithErrorLogger {
@BeforeClass
public static void beforeClass() {
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Logger controller = (Logger) LoggerFactory.getLogger("komposit.guidewire.controller");
root.setLevel(Level.ERROR);
controller.setLevel(Level.ERROR);
log.error("set logging to warn so that all tests will be called without log statements");
}
@Before
public void before() {
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Logger controller = (Logger) LoggerFactory.getLogger("komposit.guidewire.controller");
root.setLevel(Level.ERROR);
controller.setLevel(Level.ERROR);
log.error("set logging to warn before every test in this suite");
}
@ClassRule
public static ExternalResource testRule = new ExternalResource() {
@Override
protected void before() throws Throwable {
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
Logger controller = (Logger) LoggerFactory.getLogger("komposit.guidewire.controller");
root.setLevel(Level.ERROR);
controller.setLevel(Level.ERROR);
log.error("set logging to error with a custom rule");
};
@Override
protected void after() {
log.error("after finishing a test logging is still on error");
};
};
}