[解決済み] モッキート ワイルドカードを含む型を返すメソッドをスタブする
2022-05-08 08:44:49
質問
このコードを考えてみましょう。
public class DummyClass {
public List<? extends Number> dummyMethod() {
return new ArrayList<Integer>();
}
}
public class DummyClassTest {
public void testMockitoWithGenerics() {
DummyClass dummyClass = Mockito.mock(DummyClass.class);
List<? extends Number> someList = new ArrayList<Integer>();
Mockito.when(dummyClass.dummyMethod()).thenReturn(someList); //Compiler complains about this
}
}
の動作をスタブ化しようとしている行について、コンパイラが文句を言う。
dummyMethod()
. ワイルドカードを含む型を返すメソッドをスタブする方法について、何かご指摘はありますか?
どのように解決するのですか?
また、タイプセーフでない方法 doReturn を使用します。
@Test
public void testMockitoWithGenerics()
{
DummyClass dummyClass = Mockito.mock(DummyClass.class);
List<? extends Number> someList = new ArrayList<Integer>();
Mockito.doReturn(someList).when(dummyClass).dummyMethod();
Assert.assertEquals(someList, dummyClass.dummyMethod());
}
として 議論 Mockitoのgoogleグループにて。
よりもシンプルですが
thenAnswer
しかし、これは型安全でないことに注意してください。 もし、型安全性にこだわるなら、ミルハウスの
回答
が正しいです。
その他の詳細
はっきり言って、観測されたコンパイラーエラーは以下の通りです。
The method thenReturn(List<capture#1-of ? extends Number>) in the type OngoingStubbing<List<capture#1-of ? extends Number>> is not applicable for the arguments (List<capture#2-of ? extends Number>)
の間にコンパイラが最初のワイルドカードの型を割り当てているのだと思います。
when
を呼び出した後、2 番目のワイルドカードの型が
thenReturn
の呼び出しは同じです。
のように見えます。
thenAnswer
はワイルドカードを受け付けるので、この問題は発生しません。
thenReturn
はワイルドカードでない型を取るので、キャプチャする必要があります。 Mockitoの
オンゴーイングスタビング
,
OngoingStubbing<T> thenAnswer(Answer<?> answer);
OngoingStubbing<T> thenReturn(T value);
関連
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
JQuery DataTable 详解
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
IDEA パッケージステートメントの欠落
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] Mockitoで静的メソッドをモックする
-
[解決済み] mockitoで特定の型のリストをキャプチャする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
IllegalArgumentException この例外を解決する方法
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Javaクラスローダーにソースコードから潜り込む
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
IDEA パッケージステートメントの欠落