Search code examples
javahamcrest

How do I get the class of a Matcher in Hamcrest?


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.


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.)