我有以下课程:
abstract class Answer<T> {}
class AnswerInt extends Answer<Integer> {}
class AnswerText extends Answer<String> {}
现在我想在下面的测试中使用Hamcrest Matcher(它只是一个简化的示例):
@Test
public void test() {
Answer a = new AnswerInt(5);
assertThat(a, is(new AnswerInt(5))); // Compile error
}
Map<String,Answer> answerMap = questionary.getAnswerMap();
assertThat(answerMap, allOf(
hasEntry("var1", new AnswerInt(5)),
hasEntry("var2", new AnswerText("foo"))
));
但我也犯了同样的错误。
我使用的是Hamcrest 1.3版
如果您使用Java8运行测试,它将编译。对于以前的版本,您必须给编译器一个提示:
@Test
public void test() {
Answer a = new AnswerInt(5);
assertThat(a, Matchers.<Answer>is(new AnswerInt(5)));
}
对于类; 我正在构建这样的自定义Matcher; 检查列表是否包含
我有两个对象集合。这两个集合中的对象是不同类型的,并且有一个自定义匹配器来检查它们是否引用相同的东西。此外,集合的顺序相同。比方说,我们可以按名称比较这些集合中的实体,它们按该名称排序,我们有一个自定义匹配器,如果名称相同,则返回true。 我需要的是一个匹配器,它将逐项迭代这两个集合,并使用现有的自定义匹配器比较这些对(我也可以修改它)。 有人知道怎么做吗? 我的意思是:
问题所在 我目前正在尝试使用Hamcrest匹配器来断言返回的列表类型是特定类型。例如,假设我的服务调用返回了以下列表: null 使用Hamcrest匹配器,是否有一种方法可以断言空列表是某种类型的参数化的(例如)?
它看起来像hamcrest(尽管看起来,还有更多)。为什么我会选择使用(除了看起来类稍微小一点之外),为什么这两个类如此相似?
但是想法 我该怎么写?