Question

I've got a matcher, and I want to make sue the object I have is the right type. E.g. a long or a String.

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

I want method like Matcher.getType. So I could do something like

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

But I cannot see for the life of me how I get the of the matcher.

Was it helpful?

Solution

If the value you're getting from fromXpath is a String, but it may be a String that can be parsed as a long, just match everything as a String.

That is, you're not missing many real problems when you change:

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

for:

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

So use the latter.

(Using the latter will also catch a few errors, like unexpected leading zeroes.)

OTHER TIPS

Hamcrest's matcher interface does not support getting the type. The type information of Generics is erased and not available at runtime. Hence you have to create an own interface. But than you cannot use the standard matcher without wrapping them.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top