如何在Hamcrest中获得Matcher的类?

时间:2014-03-19 15:41:10

标签: java hamcrest

我有一个匹配器,我想要起诉我拥有的对象是正确的类型。例如。长或字符串。

void expect(String xpath, Matcher matcher) { 
   String actual = fromXpath(xpath);
   // convert actual into correct type for matcher
   assertThat(actual, matcher);
}

我想要像Matcher.getType这样的方法。所以我可以做类似

的事情
if (matcher.getType().equals(Long.class)) {
    long actual = Long.parseString(fromXpath(xpath));
}

但我无法看到我的生活如何得到匹配者。

2 个答案:

答案 0 :(得分:0)

Hamcrest的matcher界面不支持获取类型。泛型的类型信息将被删除,并且在运行时不可用。因此,您必须创建自己的界面。但是,如果没有包装它们就不能使用标准匹配器。

答案 1 :(得分:0)

如果您从fromXpath获得的值是String,但可能是String,可以将其解析为long,只需将所有内容匹配为String

也就是说,当你改变时,你不会错过许多真正的问题:

assertThat(a, is("abc"));
assertThat(Long.parseLong(b), is(123L));

有:

assertThat(a, is("abc"));
assertThat(b, is("123"));

所以使用后者。

(使用后者也会捕获一些错误,例如意外的前导零。)