当 JUnit 5 没有 assertThat() 函数时,如何将 Hamcrest 与 JUnit 5 一起使用?

2022-08-31 15:25:53

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


答案 1

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

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

下面的示例演示如何在 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

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

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

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


推荐