2014-09-23 48 views
3

如果調試器連接到當前測試執行,是否有方法檢查JUnit代碼?
在.NET/C#我知道這是可能的Debugger.IsAttached在執行單元測試期間檢查是否連接了調試器

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

+0

作爲一種快速入侵,當您第一次打斷點(並在15秒內)時,您總是可以使用「評估」來設置某些特定屬性......但我也有興趣知道是否有適當的方法做這個。最糟糕的情況是,使用命令行參數或系統屬性來禁用超時... – vikingsteve 2014-09-23 08:27:06

回答

3

這不是100%的故障安全方法,但您可以檢查Java Debug Wire Protocol(JDWP)是否處於活動狀態,調試器使用它來連接到JVM。這可以通過對輸入參數檢查到JVM例如在做:

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

它可能然而返回假陽性,如果別人的東西命名或jdwp如果用別的東西的協議。而且,這個命令將來可能會改變這種安全性。這種方法當然不是JUnit特有的,但由於JUnit在JVM中沒有任何特權,這是很自然的。

+0

這不僅僅是說如果參數傳遞 - 獨立於連接的調試器?對於連接,它也許應該檢查suspend = y嗎? – 2017-11-08 12:45:16

+0

你就在這裏。大多數人在他們的IDE中運行調試,而這兩者通常都會出現,但上述檢查無法保證,這是真的。 – 2017-11-08 14:04:56

相關問題