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

leo*_*lla 8 java debugging junit

如果调试器附加到当前测试执行,有没有办法检查 JUnit 代码?
在 .NET/C# 中,我知道这可以通过Debugger.IsAttached.

用例是在连接调试器时更改或完全禁用测试超时,因为如果您只有大约 15 秒(定义的超时)来调试测试,这会很烦人。

Raf*_*ter 8

这不是 100% 故障安全的方法,但您可以检查Java 调试线协议(JDWP) 是否处于活动状态,调试器使用该协议连接到 JVM。这可以通过检查 JVM 的输入参数来完成,例如:

boolean isDebug() {
  for(String arg : ManagementFactory.getRuntimeMXBean().getInputArguments()) {
    if(arg.contains("jdwp=")) {
      return true;
    }
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

然而,如果其他人命名了某些东西jdwp或者协议被用于其他东西,它可能会返回一个误报。此外,该命令将来可能会发生变化,这使得这几乎不会发生故障。这种方法当然不是 JUnit 特定的,但由于 JUnit 在 JVM 中没有任何特权,这是很自然的。