如何同时使用JUnit和Hamcrest?

2022-08-31 11:16:01

我不明白JUnit 4.8应该如何与Hamcrest匹配器一起工作。在 junit-4.8.jar 中定义了一些匹配器。同时,在hamcrest-all-1.1.jar还有其他一些匹配器。那么,去哪里呢?我应该明确地将hamcrest JAR包含在项目中并忽略JUnit提供的匹配器吗?org.hamcrest.CoreMatchersorg.hamcrest.Matchers

特别是,我对匹配器感兴趣,并且在这些罐子中找不到它。我需要别的东西吗?:)empty()

还有一个哲学问题:为什么JUnit将软件包包含在自己的发行版中,而不是鼓励我们使用原始的hamcrest库?org.hamcrest


答案 1

如果您使用的是版本大于或等于 1.2 的 Hamcrest,则应使用 .这个jar没有Hamcrest类,因此您可以避免类加载问题。junit-dep.jar

从JUnit 4.11开始,它本身没有Hamcrest类。不再需要了。junit.jarjunit-dep.jar


答案 2

junit 提供了名为 assertThat() 的新检查断言方法,该方法使用 Matchers,应该提供更具可读性的测试代码和更好的失败消息。

为了使用它,junit中包含了一些核心匹配器。您可以从这些开始进行基本测试。

如果你想使用更多的匹配器,你可以自己编写它们或使用hamcrest lib。

下面的示例演示如何在 ArrayList 上使用空匹配器:

package com.test;

import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class EmptyTest {
    @Test
    public void testIsEmpty() {
        List myList = new ArrayList();
        assertThat(myList, is(empty()));

    }
}

(我在我的构建路径中包含了hamcrest-all.jar)


推荐