2

次のコードについて考えてみます。

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

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

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

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

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

これを行う正しい方法はありますか、@SuppressWarnings("unchecked")それともテストメソッドに追加する必要がありますか?

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

4

2 に答える 2

2

ジェネリック情報は実行時に消去される [JB]Effective 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))));
}});
于 2012-02-13T16:07:45.670 に答える