【问题标题】:java.util.logging.Logger in tested class测试类中的 java.util.logging.Logger
【发布时间】:2017-09-27 19:19:03
【问题描述】:

我正在尝试为使用 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

【问题讨论】:

    标签: java unit-testing kotlin java.util.logging


    【解决方案1】:

    您必须持有比方法本地范围更广的strong reference to your logger。如果您不这样做,您的级别设置可能会由于记录器的垃圾收集而丢失。

    如果您想在控制台中看到输出,那么您还必须调整控制台处理程序的级别。

    如果你想断言一些输出值,那么你需要安装一个filter or handler 来寻找一个特定的LogRecord

    【讨论】:

    • 谢谢@jmehrens,这就是我们所缺少的。所以我在几次尝试后重写了测试类,它现在可以工作了!
    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 2016-12-18
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多