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 之前成功执行此操作时),但这似乎不对...
有人知道我在这里做错了什么吗?
您从错误的地方导入 hasProperty
。 HasProperty 没有签名为 (String, org.hamcrest.Matcher<java.lang.String>)
的方法,如错误消息所示,您可以仔细检查上面的 java API 文档。
另一方面,Matchers 具有从 HasProperty 和 HasPropertyWithValue 导入的两个 hasProperty
方法。
因此解决方法是更改导入并使用 org.hamcrest.Matchers.hasProperty
而不是 org.hamcrest.beans.HasProperty.hasProperty
我是 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 之前成功执行此操作时),但这似乎不对... 有人知道我在这里做错了什么吗?
您从错误的地方导入 hasProperty
。 HasProperty 没有签名为 (String, org.hamcrest.Matcher<java.lang.String>)
的方法,如错误消息所示,您可以仔细检查上面的 java API 文档。
Matchers 具有从 HasProperty 和 HasPropertyWithValue 导入的两个 hasProperty
方法。
因此解决方法是更改导入并使用 org.hamcrest.Matchers.hasProperty
而不是 org.hamcrest.beans.HasProperty.hasProperty