2014-01-16 29 views
9

我寫了一個性能測試類,標記爲@Ignore,因爲它需要很長時間才能運行,我通常不需要運行它。我希望能夠右鍵點擊其中一個@Test並說「運行」,但是當我在intellij中這樣做時,它不運行測試,因爲該類被標記爲忽​​略。我可以強制Intellij-IDEA運行一個被忽略的測試嗎?

我不想註釋掉@Ignore,因爲它太容易意外地提交了文件,刪除了@Ignore。但我覺得如果我明確告訴Intellij運行一個測試,它應該運行它,不管@Ignore。請記住,如果我運行一組類(例如:所有的包),我仍然希望這個測試類被忽略。

是否可以在Intellij中獲得此功能?

+1

在我看來,濫用@Ignored註解並不是一個好主意。也許把測試放在一個單獨的套件中,只有在你需要的時候才運行它會更好。最終(在你的CI平臺上),你會想要測試執行,因爲那是什麼測試。 – kmera

+0

@ k-mera啊,這是一個有趣的想法。這將需要更多的努力,因爲我將不得不確保我的構建腳本被配置爲跳過它,但我可能會沿着這條路線走下去。 –

+0

是的我明白這個問題。一旦你提交你的代碼,它應該在你所有的測試中進行測試。但如果在本地需要很長時間,那麼這可能會減慢發展。 – kmera

回答

5

我發現this link這說明你可以用Assume.assumeTrue做一些棘手的事情,如果條件爲false,它會將測試標記爲忽略,通常這是一個在條件中使用的系統屬性,所以你可以通過它作爲命令行中的一個參數。 IntelliJ可以讓你自定義命令行參數,所以它應該可以工作,但我沒有嘗試過。

從鏈路的示例是:

@Test 
public void shouldTryEveryPossiblePhoneticAttributeSet() throws IOException { 
    Assume.assumeTrue(TestEnvironment.hasBigParseSets()); 
    ... 
} 

public class TestEnvironment { 
    private static final String HAS_BIG_PARSESETS = "hasBigParseSets"; 
    public static boolean hasBigParseSets(){ 
     return "true".equalsIgnoreCase(System.getProperty(HAS_BIG_PARSESETS)); 
    } 
} 

而 「MVN測試-P bigParseSets」 與 「測試MVN」。

編輯:我剛剛在StackOverflow上發現了this neat thread,它告訴我們如何運行一個單一的junit測試。我假設我不需要引用它,因爲它是在StackOverflow中發佈的。這解釋瞭如何從命令行執行該操作,但是您應該可以執行與類和方法名稱的硬編碼值非常類似的操作,然後右鍵單擊SingleJUnitTestRunner類並讓IntelliJ運行它。

+0

這是一個很好的竅門,但它似乎並不像Intellij想要的那樣工作。出於某種原因,'Assume.assumeTrue(false);'返回一個錯誤,而不是被忽略,[就像文檔說的那樣,默認情況下](http://junit.sourceforge.net/javadoc/org/junit/Assume的.html)。 –

+0

我剛剛說的是,你的鏈接顯示截圖說不然有什麼奇怪的。我進一步研究並發現,這是因爲我正在使用[junit基準測試](http://labs.carrotsearch.com/junit-benchmarks.html)。我想那個測試運行者不會按照你想要的方式處理'Assume'。 –

相關問題