Java 使用 Hamcrest 进行 Junit 测试:无法创建组合匹配器

Java Junit Test with Hamcrest: cannot create compositional Matcher

我是 Java 单元测试的新手,在复制我在教程中执行的内容时遇到了一些麻烦。

我有一封电子邮件 class,其中有很多属性,但其中有 firstName

private final String firstName;
public String getFirstName() {
        return firstName;
}

名字以标准方式在构造函数中设置:

this.firstName = firstName;

我编写了一个测试来测试电子邮件是否包含名字。设置测试后如下所示:

@Test
public void emailIsCreated() {
    assertThat(em1, hasProperty("firstName"));
}

本次测试通过。 我的问题是我正在尝试使用组合匹配器扩展测试以匹配名字的值,如下所示:

@Test
public void emailIsCreated() {
    assertThat(em1, hasProperty("firstName", equalTo("Jon")));
}

但我不断收到编译错误,内容为:

hasProperty (String) in HasProperty cannot be applied to (String, org.hamcrest.Matcher<java.lang.String>)

我的直觉告诉我,根据消息将字符串等同起来有问题(事实上,当我在匹配 int 之前成功执行此操作时),但这似乎不对... 有人知道我在这里做错了什么吗?

您从错误的地方导入 hasPropertyHasProperty 没有签名为 (String, org.hamcrest.Matcher<java.lang.String>) 的方法,如错误消息所示,您可以仔细检查上面的 java API 文档。

另一方面,

Matchers 具有从 HasPropertyHasPropertyWithValue 导入的两个 hasProperty 方法。

因此解决方法是更改​​导入并使用 org.hamcrest.Matchers.hasProperty 而不是 org.hamcrest.beans.HasProperty.hasProperty