【问题标题】: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]