60

要将 Hamcrest 与 JUnit 4 一起使用,我们使用一个assertThat()函数。但是,JUnit 5 将不再具有assertThat()功能。如何在没有 的情况下使用 Hamcrest assertThat()

4

2 回答 2

66

您必须确保 Hamcrest 包含在类路径中,然后使用assertThat()Hamcrest 提供的功能。从当前的JUnit 5 用户指南 - 编写测试断言

JUnit Jupiter 的 org.junit.jupiter.Assertions 类不提供一个 assertThat() 方法,就像在 JUnit 4 的 org.junit.Assert 类中发现的那样,它接受一个 Hamcrest 匹配器。相反,鼓励开发人员使用第三方断言库提供的对匹配器的内置支持。

以下示例演示了如何在 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。”

于 2017-04-07T14:09:42.497 回答
9

请参阅https://github.com/junit-team/junit5/issues/147

您可以在 JUnit5 中同时使用 Hamcrest 和 AssertJ。两个框架都有一个简单的 assertThat 方法,您可以根据需要导入和使用。

目前,我们不打算在我们自己的断言中支持这些框架以避免依赖。尽管如此,人们仍然可以很好地使用它们。

于 2018-07-18T13:50:05.397 回答