簡體   English   中英

檢查在執行單元測試期間是否附加了調試器

[英]Check if a debugger is attached during the execution of a unit test

如果調試器附加到當前測試執行,有沒有辦法檢查 JUnit 代碼?
在 .NET/C# 中,我知道這可以通過Debugger.IsAttached

用例是在連接調試器時更改或完全禁用測試超時,因為如果您只有大約 15 秒(定義的超時)來調試測試,這會很煩人。

這不是 100% 故障安全的方法,但您可以檢查Java 調試線協議(JDWP) 是否處於活動狀態,調試器使用該協議連接到 JVM。 這可以通過檢查 JVM 的輸入參數來完成,例如:

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

但是,如果其他人將某些內容命名為jdwp或者該協議用於其他內容,則它可能會返回誤報。 此外,該命令將來可能會發生變化,這使得這幾乎不會發生故障。 這種方法當然不是 JUnit 特定的,但由於 JUnit 在 JVM 中沒有任何特權,這是很自然的。

基於拉斐爾的回答:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM