2017-04-07 447 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