Search code examples
javajunitjunit4matcherassertthat

How to use the isA-Matcher


I have a certain method that delivers a Restriction-object (where Restriction is an interface). And since its implementation is already testet, I just want to test if my method actually delivers a RestrictionImpl-object.
I saw that there are matchers which I can use together with assertThat and I thought, that the isA-matcher is the thing want for this task.

Simplified my code looks like that:

public static Restriction getRestriction() {
    return new RestrictionImpl();
}

and my test looks like that;

@Test
public void getRestriction_returnsRestrictionImpl() {
    assertThat(getRestriction(), isA(RestrictionImpl.class));
}

However this won't compile. All I could do is test, if a RestrictionImpl is a Restriction... but there is no point in doing this.

Am I misunderstanding to purpose of isA? And what is it acually meant for?

UPDATE:
Using assertThat(getRestriction(), is(instanceOf(RestrictionImpl.class))) would work, but I thought that isA is a shortcut for exactly that.
Calling assertThat in the way I want would require it to have the signature assertThat(T, Matcher<? extends T>), but its signature is assertThat(T, Matcher<? super T>)


Solution

  • I found an issue describing my problem:
    https://github.com/hamcrest/JavaHamcrest/issues/27

    And it looks like isA simply has the wrong signature in this version of junit. It is meant to be shortcut for is(isIntanceOf(...)), but it is not.