我有某种方法可以传递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));
}
但是,这将无法编译。我所能做的就是测试,如果
RestrictionImpl
是Restriction
...,但是这样做毫无意义。我是否对
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(...))
的快捷方式,但事实并非如此。