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

时间:2018-03-31 13:33:05

标签: java unit-testing junit hamcrest

我不熟悉Java中的单元测试,并且在复制我在教程中执行的操作时遇到了一些麻烦。

我有一个电子邮件类,其中包含许多属性,但其中包含firstName

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

第一个名称以标准方式在构造函数中设置:

this.firstName = firstName;

我已经编写了一个测试来测试该电子邮件是否包含名字。设置完成后,测试如下:

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

此测试通过。 我的问题是我试图用组合匹配器来扩展测试以匹配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之前成功执行此操作的事实),这有一个问题,但这看起来并不合适...... 有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

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

另一方面,

Matchers同时从HasPropertyHasPropertyWithValue导入了hasProperty个方法。

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