[java] 有條件地忽略JUnit 4中的測試



Answers

您應該簽出Junit-ext項目。 他們有RunIf註釋執行條件測試,如:

@Test
@RunIf(DatabaseIsConnected.class)
public void calculateTotalSalary() {
    //your code there
}

class DatabaseIsConnected implements Checker {
   public boolean satisify() {
        return Database.connect() != null;
   }
}

[代碼示例取自他們的教程]

Question

好的,所以@Ignore註釋對於標記不應該運行測試用例很有用。

但是,有時我想忽略基於運行時信息的測試。 一個例子可能是如果我有一個並發測試需要在一定數量的核心的機器上運行。 如果這個測試是在單處理器機器上運行的,我認為僅僅通過測試並不是正確的(因為它沒有運行),並且它肯定是不合適的,不能通過測試並破壞構建。

所以我希望能夠在運行時忽略測試,因為這似乎是正確的結果(因為測試框架將允許構建通過但記錄測試未運行)。 我相當肯定註釋不會給我這種靈活性,並且懷疑我需要手動為有問題的類創建測試套件。 然而,文檔並沒有提到任何有關這一點,並通過API來看,它也不清楚這將如何以編程方式完成(即我如何以編程方式創建一個Test或類似的實例等同於由@Ignore註釋創建的實例?)。

如果有人在過去做過類似的事情,或者對我如何能做到這一點有一個明確的想法,我很樂意聽到它。




快速提示: Assume.assumeTrue(condition)忽略其餘步驟,但會通過測試。 要使測試失敗,請在條件語句中使用org.junit.Assert.fail() 。 工作方式與Assume.assumeTrue()相同,但未通過測試。






Links