2012-02-13 6 views
2

は、次のコードを考えてみましょう:引数マッチャでジェネリッククラスタイプを指定

final Foo foo = context.mock(Foo.class); 

context.checking(new Expectations() {{ 
    one(foo).someMethod(with(aNonNull(List.class))); 
}}); 

私はsomeMethodがタイプList<Bar>の非null引数で呼び出されていることを示唆しようとしています。しかし、リストにBar型のオブジェクトが含まれていることを指定する正しい構文を理解することはできません。以下の単純な試みは有効なコードではありません。

final Foo foo = context.mock(Foo.class); 

context.checking(new Expectations() {{ 
    one(foo).someMethod(with(aNonNull(List<Bar>.class))); 
}}); 

これを行うための正しい方法があるか、私は私のテスト方法に@SuppressWarnings("unchecked")を追加することを強制していますか?

これは厳密にはJMock特有の質問ではありませんが、過去にこの問題に遭遇した可能性のある人々を引き付けるようにタグ付けすると思いました。

答えて

2

実行時にジェネリック情報が消去されます[JB]有効なJava SE p.l14。 これを別の方法で確認する必要があります。

私は、このメソッドは、リストのすべての要素の種類を確認することが分かっ:

final Foo foo = context.mock(Foo.class); 

context.checking(new Expectations() {{ 
    oneOf(foo).someMethod((List<Object>) with(Every.everyItem(IsInstanceOf.instanceOf(Bar.class)))); 
}}); 
+0

これは根本的な原因を説明するため、賞金を魅了しています。私は、このような状況にあった誰かからのコメントを感謝したいと思います。おそらく、この問題に近づく方法は異なります。 –

+0

おそらく、あなた自身のハムクレスト・マッチャーを書くことができます - List.ClassとBar.classを渡し、あなたの自己 – blank

関連する問題