我有一个匹配器,我想要起诉我拥有的对象是正确的类型。例如。长或字符串。
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));
}
但我无法看到我的生活如何得到匹配者。
答案 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"));
所以使用后者。
(使用后者也会捕获一些错误,例如意外的前导零。)