在向類中寫入junit的過程中,我得到了一些要求,例如使用JUnitRunner執行測試,然後使用PowermockRunner執行測試,所以基於此我要決定是否跳過測試或繼續。請你能讓我知道有沒有辦法來檢查這個?如何檢查Junit是否正在運行JunitRunner或PowermockRunner
在此先感謝。
在向類中寫入junit的過程中,我得到了一些要求,例如使用JUnitRunner執行測試,然後使用PowermockRunner執行測試,所以基於此我要決定是否跳過測試或繼續。請你能讓我知道有沒有辦法來檢查這個?如何檢查Junit是否正在運行JunitRunner或PowermockRunner
在此先感謝。
有幾個選項,但沒有一個是漂亮的。
最好的辦法是,如果這些跑步者中的任何一個都支持你可以查詢的系統屬性,但是我懷疑這一點。
如果失敗,您可以執行類查找或檢查堆棧。
類查找
boolean isPowerMock = false;
try{
Class.forName("fully.qualified.name.of.PowerMockRunner");
isPowerMock = true;
}catch(ClassNotFoundException e){}
注意,這種技術可能會返回一個誤報如果PowerMock是在類路徑上,但不使用亞軍。
檢查堆棧
boolean isPowerMockRunner = false;
for (StackTraceElement stackTraceElement : Thread.currentThread().getStackTrace()) {
if(stackTraceElement.getClassName().contains("PowerMockRunner")) {
isPowerMockRunner = true;
break;
}
}
或者,爪哇8風格:
boolean isPowerMock = Arrays.stream(
Thread.currentThread()
.getStackTrace()
)
.anyMatch(
elem -> elem.getClassName()
.contains("PowerMockRunner")
);
只是我想提供一些更多的細節,那是我創建了@RunWith(PowerMockRunner.class)@PrepareForTest(以靜態方式模擬的類)的Junit。 – Ram
不要。只是。別。在如此多的層面上這是錯誤的。寫兩個測試,每個測試都有自己的跑步者並且完成它。如果您需要,請將代碼放入共享的抽象基礎測試類中。 –