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

问题描述 投票:26回答:2

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

hamcrest junit5 assertthat
2个回答
38
投票

你必须确保Hamcrest包含在类路径中,然后使用Hamcrest提供的assertThat()函数。从目前的JUnit 5 User Guide - Writing Tests Assertions

JUnit Jupiter的org.junit.jupiter.Assertions类不提供类似于JUnit 4的org.junit.Assert类中的assertThat()方法,该类接受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方法,您可以根据需要导入和使用它。

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

© www.soinside.com 2019 - 2024. All rights reserved.