【发布时间】:2014-10-24 10:59:55
【问题描述】:
我刚开始使用 Hamcrest,所以我可能做错了。
我有一个List<Foo> foos 和Foo 界面看起来有点像这样:
public abstract interface Foo {
public String getBar();
}
由impl.FooImpl实现:
public class FooImpl implements Foo {
protected String _bar = "some value";
public String getBar() {
return _bar;
}
}
我的断言如下所示:
assertThat(
foos,
Matchers.hasItem(
Matchers.<Foo> hasProperty(
"bar",
equalTo("some value")
)
)
);
不幸的是,JUnit/Hamcrest 并不高兴:
java.lang.AssertionError:
Expected: a collection containing hasProperty("bar", "someValue")
got: <[com.example.impl.FooImpl@2c78bc3b]>
知道我需要做什么来解决这个问题吗?
更新:我的“测试”课程在这里:
public class FooTest {
public static void main(String... args) throws Exception {
List<Foo> foos = Arrays.<Foo> asList(new FooImpl());
assertThat(
foos,
Matchers.<FooImpl> hasItem(Matchers.hasProperty("bar", equalTo("some value")))
);
}
}
显然,我希望看到断言通过而没有异常... :)
更新:现已修复;我刚刚在 IntelliJ 中设置了一个空白的 maven 项目,它运行良好。可能是因为拼写错误,或者我在 Eclipse 中导入了错误的方法,但这肯定是 OSI 第 8 层的问题。我要求结束谈话。对不起大家,感谢您的帮助。
【问题讨论】:
-
您的住宿名称是“bar”,而不是“_bar”。 “_bar”是您的私有字段的名称。属性的名称是 getter 中
get之后的名称。 -
为什么要关闭投票?如果这不是 SO 的用途,那么我不知道是什么
-
我现在将它交叉发布到 groups.google.com/d/msg/hamcrest-java/AmZGLq0Kby0/ojd9XbbxjGUJ 的 hamcrest 用户组,因为显然有人认为它不属于这里......
-
@Christian 目前你有一个接近的投票,它表示问题“必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码我>”。如果您不提供问题的可编译示例,您可能会继续获得如此接近的投票。没有什么比可重现的问题更能加速答案的出现了。
-
能否请您使用 Hamcrest 1.3 的 assertThat。它会打印有关失败原因的更多详细信息。
标签: java junit assert hamcrest