我是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之前成功进行此操作的事实),但这似乎并不正确...
有人知道我在做什么错吗?
最佳答案
您从错误的位置导入hasProperty
。 HasProperty没有带有签名(String, org.hamcrest.Matcher<java.lang.String>)
的方法,如错误消息所示,您可以再次检查上面的Java API文档。
另一方面,Matchers具有从HasProperty和HasPropertyWithValue导入的hasProperty
方法。
因此,解决方法是更改导入并使用org.hamcrest.Matchers.hasProperty
而不是org.hamcrest.beans.HasProperty.hasProperty