2016-09-14 63 views
0

在向類中寫入junit的過程中,我得到了一些要求,例如使用JUnitRunner執行測試,然後使用PowermockRunner執行測試,所以基於此我要決定是否跳過測試或繼續。請你能讓我知道有沒有辦法來檢查這個?如何檢查Junit是否正在運行JunitRunner或PowermockRunner

在此先感謝。

+2

不要。只是。別。在如此多的層面上這是錯誤的。寫兩個測試,每個測試都有自己的跑步者並且完成它。如果您需要,請將代碼放入共享的抽象基礎測試類中。 –

回答

1

有幾個選項,但沒有一個是漂亮的。

最好的辦法是,如果這些跑步者中的任何一個都支持你可以查詢的系統屬性,但是我懷疑這一點。

如果失敗,您可以執行類查找或檢查堆棧。

  1. 類查找

    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") 
              ); 
    
    +0

    只是我想提供一些更多的細節,那是我創建了@RunWith(PowerMockRunner.class)@PrepareForTest(以靜態方式模擬的類)的Junit。 – Ram

    相關問題