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