我有某种方法可以传递Restriction -object(其中Restriction是接口(interface))。并且由于它的实现已经是testet了,所以我只想测试我的方法是否实际传递了RestrictionImpl -object。
我看到有些匹配器可以与assertThat一起使用,我认为isA -matcher是此任务想要的东西。

简化后的代码如下所示:

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

我的测试看起来像这样;
@Test
public void getRestriction_returnsRestrictionImpl() {
    assertThat(getRestriction(), isA(RestrictionImpl.class));
}

但是,这将无法编译。我所能做的就是测试,如果RestrictionImplRestriction ...,但是这样做毫无意义。

我是否对isA的目的有误解?它的确切含义是什么?

更新:
使用assertThat(getRestriction(), is(instanceOf(RestrictionImpl.class)))可以工作,但我认为isA正是为此的捷径。
以我想要的方式调用assertThat会要求它具有签名assertThat(T, Matcher<? extends T>),但是其签名是assertThat(T, Matcher<? super T>)

最佳答案

我发现了一个描述我的问题的问题:
https://github.com/hamcrest/JavaHamcrest/issues/27

在此版本的junit中,isA似乎具有错误的签名。它应该是is(isIntanceOf(...))的快捷方式,但事实并非如此。

10-08 02:49