2017-09-05 21 views
2

EasyMockまたはPowerMockを使用するメソッドからClassクラスのリターンオブジェクトをどうやって模倣するのだろうか?EasyMockとジェネリッククラスを返すメソッド

私は、このインターフェイスメソッド

Class<T> getRootBeanClass(); 

の戻り値の型を模擬しようとしている私は、次のことを試してみましたが、無喜び

EasyMock.expect(mockViolation.getRootBeanClass()).andReturn(EasyMock.anyObject()); 

と私は、このエラーメッセージ

java.lang.IllegalStateException: matcher calls were used outside expectations 

を取得しますどんな助けでも大歓迎です

+1

ちょうど記録のために:あなたはもはや必要とされない古いコメントを削除したいかもしれません... – GhostCat

答えて

2

anyObject()は、引数マッチャーです。

EasyMockは、を別の模擬仕様の間で区別できるように、を使用します。同様に:あなたはを返す

EasyMock.expect(mock.foo(eq("B"), anyObject()).andReturn(resultForB); 

EasyMock.expect(mock.foo(eq("A"), anyObject()).andReturn(resultForA); 

オブジェクトは(嘲笑、またはない嘲笑することができますいずれか)リアル既存のオブジェクトでなければなりません。しかし、anyObject()はあなたのためのオブジェクトを作成しません!

EasyMockはあなたのためにジェネリックを生成することはできません - ので、キャストを必要とする、のようなもの:

Class<Foo> foo = (Class<Foo>) mock(Class.class) 

しかし、これは、この場合には動作しません - java.lang.Classのが最終的なものとして!そして、EasyMockは最終クラスを模擬することができません!あなたはそれのためにPowerMockが必要です - または(私の推薦)最新バージョンのMockito。

あなたがMockitoに行く場合:最終クラスの模擬を有効にする必要があるため、ドキュメントをお読みください。これは現在の実験的な機能です。

関連する問題