[英]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.