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

标签 java debugging junit

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

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

最佳答案

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

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

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

关于java - 检查在执行单元测试期间是否附加了调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990147/

相关文章:

java - 来自配置文件或 .java 的巨大数组

java - 是否可以通过 JUNIT 测试属性注入(inject)的正确性?

delphi - 应用程序 (TApplication) 实例在何时何地创建?

java - 尝试在 Flash Builder 4.5 for PHP 中调试时出现 "Unrecognized Windows Sockets error: 0: JVM_Bind"

javascript - 将 EventEmitter 跨步到调试器中的监听器

java - Junit Test 用于在 LDAP 连接测试中测试 NamingEnumeration 中的数据

java - 模拟返回列表 future 的外部依赖

java - 如果 Ascii 值超过 "A",如何在不使用 If 语句的情况下将其包装回 "Z"?

java - 在 Eclipse 中创建类似于 Spring Petclinic 的项目结构

java - 将多个线程与 RandomAccessFile 一起使用有助于提高性能吗?