junit 检查在单元测试执行期间是否附加了调试器

syqv5f0l  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(102)

如果调试器附加到当前的测试执行中,是否有办法签入JUnit代码?
在.NET/C#中,我知道使用Debugger.IsAttached可以实现这一点。
用例是在连接调试器时更改或完全禁用测试超时,因为如果您只有大约15秒(定义的超时)来调试测试,这是非常烦人的。

soat7uwm

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中没有任何特权,这是很自然的。

a11xaf1n

a11xaf1n2#

根据拉斐尔的回答:

private static boolean isDebug() {
   return ManagementFactory.getRuntimeMXBean().getInputArguments().stream().anyMatch(arg->arg.contains("jdwp=") && arg.contains("suspend=y"));
}

相关问题