如何使用isA-Matcher
How to use the isA-Matcher
我有一个特定的方法可以传递一个 Restriction
-object(其中 Restriction
是一个接口)。由于它的实现已经过测试,我只想测试我的方法是否真的传递了一个 RestrictionImpl
-object。
我看到有可以与 assertThat
一起使用的匹配器,我认为 isA
-匹配器是完成此任务所需的东西。
简化后的代码如下所示:
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>)
您可能想使用 instanceOf. And you know, those things all have javadoc available in the open. Where isA ... should be exactly what you need. So the problem might be: do you have the required hamcrest core matchers library in your project setup? In other words: maybe you should read this here。
还有一些示例代码,来自我自己的一个项目:
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
...
@Test
public void testWhatever() throws IOException, ApiException {
try { ...
fail("should have thrown");
} catch (IllegalStateException e) {
e.printStackTrace(); // as expected
assertThat(e.getCause(), is(instanceOf(SomeClass.class)));
那么,你们那里有那些进口商品吗?
您的项目设置中是否有支持这些导入的库?
我发现了一个描述我的问题的问题:
https://github.com/hamcrest/JavaHamcrest/issues/27
看起来 isA
只是在这个版本的 junit 中有错误的签名。它本来是 is(isIntanceOf(...))
的快捷方式,但它不是。
我有一个特定的方法可以传递一个 Restriction
-object(其中 Restriction
是一个接口)。由于它的实现已经过测试,我只想测试我的方法是否真的传递了一个 RestrictionImpl
-object。
我看到有可以与 assertThat
一起使用的匹配器,我认为 isA
-匹配器是完成此任务所需的东西。
简化后的代码如下所示:
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>)
您可能想使用 instanceOf. And you know, those things all have javadoc available in the open. Where isA ... should be exactly what you need. So the problem might be: do you have the required hamcrest core matchers library in your project setup? In other words: maybe you should read this here。
还有一些示例代码,来自我自己的一个项目:
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
...
@Test
public void testWhatever() throws IOException, ApiException {
try { ...
fail("should have thrown");
} catch (IllegalStateException e) {
e.printStackTrace(); // as expected
assertThat(e.getCause(), is(instanceOf(SomeClass.class)));
那么,你们那里有那些进口商品吗? 您的项目设置中是否有支持这些导入的库?
我发现了一个描述我的问题的问题:
https://github.com/hamcrest/JavaHamcrest/issues/27
看起来 isA
只是在这个版本的 junit 中有错误的签名。它本来是 is(isIntanceOf(...))
的快捷方式,但它不是。