2017-04-07 453 views

回答

12

您必須確保Hamcrest包含在classpath中,然後使用Hamcrest提供的assertThat()函數。從當前JUnit 5 User Guide - Writing Tests Assertions

的JUnit木星的org.junit.jupiter.Assertions類不提供像在JUnit 4的org.junit.Assert 類中找到,它接受一個Hamcrest匹配器的 assertThat()方法。相反,鼓勵開發者 使用由 第三方斷言庫提供的對匹配器的內置支持。

以下示例演示如何在JUnit Jupiter測試中使用來自Hamcrest的assertThat()支持 。只要已將Hamcrest庫 添加到類路徑中,就可以靜態導入 (如assertThat(),is()和equalTo())方法,然後在測試 (如下面的assertWithHamcrestMatcher()方法)中使用它們。

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.hamcrest.CoreMatchers.is; 
import static org.hamcrest.MatcherAssert.assertThat; 

import org.junit.jupiter.api.Test; 

class HamcrestAssertionDemo { 

    @Test 
    void assertWithHamcrestMatcher() { 
     assertThat(2 + 1, is(equalTo(3))); 
    } 

} 

自然的基礎上,JUnit 4中的編程模型可以 繼續使用org.junit.Assert#assertThat傳統的測試。」

+2

什麼吹拂我的心靈是,'assertThat'是應該是做所有斷言的新方法,然後突然出現JUnit 5,並以某種方式仍然擁有所有傳統的斷言方法,但也刪除了唯一的現代方法,他們已經致力於破壞API, d認爲他們真的可以到那裏去除所有冗餘的斷言方法我認爲這可能是爲了方便遷移,但不是,參數順序並不相同。 – Trejkaz