2016-08-16 13 views
4

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)); 
} 

しかし、これはコンパイルされません。私ができることは、RestrictionImplRestrictionの場合はテストですが、これを行う際には何の意味もありません。

私はisAの目的を誤解していますか?それはどういう意味ですか?

UPDATE:
assertThat(getRestriction(), is(instanceOf(RestrictionImpl.class)))を使用しては動作しますが、私はisAはまさにそのための近道であると考えました。
は、署名assertThat(T, Matcher<? extends T>)を持って、それを必要とする私が好きな方法でassertThatを呼び出すが、その署名はassertThat(T, Matcher<? super T>)

+0

「assertThat(getRestriction()。getClass()、isA(RestrictionImpl.class))」または「assertThat(getRestriction()、isA(instanceOf(RestrictionImpl.class)))」です。 – PEdroArthur

+0

どちらもコンパイルされません。 – danielspaniol

+0

assertThatのシグネチャは 'assertThat(T actual、Matcher matcher)'であり、 'assertThat(Tact、Matcher matcher)'のシグネチャは 'assertThat(T actual、Matcher matcher)'です。 Matcherのタイプがである必要がありますが、あなたのコードでは、 'RescrictionImpl.class'はタイプ' Rescriction.class'ではないのでコンパイルは失敗します。この問題を解決するには、あなたのコードを 'assertThat(getRestriction (public)RestrictionImpl getRestriction()。 – walsh

答えて

4

私は私の問題を説明する問題が見つかりました:
https://github.com/hamcrest/JavaHamcrest/issues/27

をそしてisAは、単にJUnitのこのバージョンで間違った署名を持っているように見えます。 is(isIntanceOf(...))のショートカットを意味しますが、そうではありません。

2

おそらくあなたはinstanceOfを使いたいです。そして、あなたが知っていることは、それらのすべてがオープンで利用可能なjavadocを持っていることです。 isAは...あなたが必要とするものでなければなりません。だから問題は:あなたのプロジェクトセットアップに必要なhamcrestコアマッチャーライブラリを持っていますか?言い換えれば:多分あなたはこれを読むべきです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))); 

だから、あなたがそれらの輸入がありますか? これらのインポートをバックアップするライブラリがプロジェクトに設定されていますか?

+0

isA(java.lang.Class type)頻繁に使用されるショートカットは、(instanceOf()、isA、Restriction.class) (SomeClass.class))。" – danielspaniol

+0

私は' assertThat(T、Matcher 'ですが、' assertThat(T、Matcher) ' – danielspaniol

+0

のようなものを使いたいと思っていますので、' assertThat'のシグネチャについては疑問に思っていました... – GhostCat