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

我有一个具有许多属性的电子邮件类,但其中有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

10-04 12:51