如果调试器附加到当前的测试执行,有没有办法检查JUnit代码?
在.NET / C#中,我知道Debugger.IsAttached
可以实现这一点。
用例是在连接调试器时更改或完全禁用测试超时,因为如果您只有大约15秒(定义的超时)来调试测试,这非常烦人。
答案 0 :(得分:4)
这不是100%的故障安全方法,但您可以检查调度器使用Java Debug Wire Protocol(JDWP)是否处于活动状态以连接到JVM。这可以通过检查JVM的输入参数来完成,例如:
boolean isDebug() {
for(String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
if(arg.contains("jdwp=")) {
return true;
}
}
return false;
}
如果其他人命名为jdwp
或者协议用于其他内容,则可能会返回误报。此外,该命令可能在将来发生变化,这使得它几乎不会安全。这种方法当然不是特定于JUnit的,但由于JUnit在JVM中没有任何特权,这是很自然的。
答案 1 :(得分:0)
基于拉斐尔的答案:
private static boolean isDebug() {
return ManagementFactory.getRuntimeMXBean().getInputArguments().stream().anyMatch(arg->arg.contains("jdwp=") && arg.contains("suspend=y"));
}