java.util.logging.Logger в тестируемом классе

Я пытаюсь запустить тест для своего класса, который использует java.util.logging.Logger.

import java.util.logging.Logger;

public class TestLogging {
    final Logger logger = Logger.getLogger("Test");

    public void f1() {
        logger.entering(getClass().getName(), "f1");

        logger.info("f1");
        logger.fine("f1");
        logger.finer("f1");
        logger.finest("f1");

        logger.exiting(getClass().getName(), "f1");
    }
}

Поэтому я настраиваю тестовый класс, чтобы проверить, выдает ли регистратор выходные данные во время тестирования класса.

import org.junit.Before
import org.junit.Test
import java.util.logging.Level
import java.util.logging.Logger

class TestLogger {
    @Before
    fun setupLogger() {
        Logger.getLogger("Test").level = Level.FINEST
    }

    @Test
    fun test() {
        TestLogging().f1()
    }
}

Но когда я запускаю его, я вижу только следующий вывод, как будто уровень установлен по умолчанию.

TestLogger > test STANDARD_ERROR
    Sep 27, 2017 2:17:32 PM TestLogging f1
    INFO: f1

person Philipp Grigoryev    schedule 27.09.2017    source источник


Ответы (1)


Вы должны иметь сильную ссылку на ваш регистратор, который шире, чем локальная область метода. Если вы этого не сделаете, ваши настройки уровня могут быть потеряны из-за сборки мусора регистратором.

Если вы хотите увидеть вывод в консоли, вам также необходимо настроить уровень обработчика консоли.

Если вы хотите подтвердить какое-то выходное значение, вам необходимо установить фильтр или обработчик для поиска определенного LogRecord.

person jmehrens    schedule 27.09.2017
comment
Спасибо, @jmehrens, вот чего не хватало. Поэтому я переписал тестовый класс после нескольких попыток, и теперь он работает! - person Philipp Grigoryev; 28.09.2017