【问题标题】:Run specific @BeforeClass only when starting unit tests in debug mode?仅在调试模式下启动单元测试时运行特定的@BeforeClass?
【发布时间】:2018-08-01 10:27:10
【问题描述】:

我在 TestNG 中实现了一个简单的单元测试来测试消息交换。 当我调试测试时,我想运行所有记录器(java.util.logging)以使用日志级别FINEST 运行。为了实现这一点,我定义了一个@BeforeClassmethod,它将所有记录器切换到预期的日志级别。 在调试模式下(通过 IntelliJ)启动 java-vm 时是否有可能自动启用细粒度记录器。我想过影响BeforeClass-Annotation 的enabled-property,但不知道这是否以及如何实现。

@BeforeClass(enabled = false)
    public void beforeClass()
    {
        Logger rootLogger = LogManager.getLogManager().getLogger("");
        rootLogger.setLevel(Level.FINEST);
        for (Handler h : rootLogger.getHandlers()) {
            h.setLevel(Level.FINEST);
        }
    }

【问题讨论】:

    标签: java unit-testing debugging logging testng


    【解决方案1】:

    您可以在运行时使用ManagementFactory.getRuntimeMXBean().getInputArguments() 了解您是否处于调试模式,并相应地设置日志级别。

    在intelliJ中,如下代码:

    System.out.println("TEST: " + 
        ManagementFactory.getRuntimeMXBean().getInputArguments());
    

    在调试模式下打印以下输出:

    测试: [-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:40770,suspend=y,server=n, -ea, -Didea.test.cyclic.buffer.size=1048576, -javaagent:/opt/idea-IC-181.4203.550/plugins/Groovy/lib/agent/gragent.jar, -javaagent:/opt/idea-IC-181.4203.550/lib/rt/debugger-agent.jar=file:/tmp/capture.props, -Dfile.encoding=UTF-8]

    以及非调试模式下的以下输出:

    测试:[-ea, -Didea.test.cyclic.buffer.size=1048576, -javaagent:/opt/idea-IC-181.4203.550/lib/idea_rt.jar=46442:/opt/idea-IC-181.4203.550/bin, -Dfile.encoding=UTF-8]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-16
      • 2016-04-17
      • 1970-01-01
      • 2012-07-09
      • 2013-08-10
      • 2021-04-09
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多