Frage

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.

War es hilfreich?

Lösung

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

Andere Tipps

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top