Как использовать JUnit Suite для перехвата тестов с @before - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу запустить мои существующие тесты два раза, один раз с уровнем журнала, установленным на 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");
    };
};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...