Restriction
-object(ここではRestriction
はインターフェイス)を提供する特定の方法があります。実装はすでにテストセットであるため、私のメソッドが実際にRestrictionImpl
オブジェクトを配信しているかどうかをテストしたいだけです。
私はassertThat
と一緒に使うことができるマッチャーがあることを知りました。私は、isA
-matcherがこの作業に必要なものだと考えました。私のコードは、そのように見える簡体isA-Matcherの使用方法
:
public static Restriction getRestriction() {
return new RestrictionImpl();
}
と私のテストは、そのように見えます。
@Test
public void getRestriction_returnsRestrictionImpl() {
assertThat(getRestriction(), isA(RestrictionImpl.class));
}
しかし、これはコンパイルされません。私ができることは、RestrictionImpl
がRestriction
の場合はテストですが、これを行う際には何の意味もありません。
私はisA
の目的を誤解していますか?それはどういう意味ですか?
UPDATE:
assertThat(getRestriction(), is(instanceOf(RestrictionImpl.class)))
を使用しては動作しますが、私はisA
はまさにそのための近道であると考えました。
は、署名assertThat(T, Matcher<? extends T>)
を持って、それを必要とする私が好きな方法でassertThat
を呼び出すが、その署名はassertThat(T, Matcher<? super T>)
「assertThat(getRestriction()。getClass()、isA(RestrictionImpl.class))」または「assertThat(getRestriction()、isA(instanceOf(RestrictionImpl.class)))」です。 – PEdroArthur
どちらもコンパイルされません。 – danielspaniol
assertThatのシグネチャは 'assertThat(T actual、Matcher super T> matcher)'であり、 'assertThat(Tact、Matcher super T> matcher)'のシグネチャは 'assertThat(T actual、Matcher super T> matcher)'です。 Matcherのタイプが super T>である必要がありますが、あなたのコードでは、 'RescrictionImpl.class'はタイプ' Rescriction.class'ではないのでコンパイルは失敗します。この問題を解決するには、あなたのコードを 'assertThat(getRestriction (public)RestrictionImpl getRestriction()。 – walsh