[解決済み】Mockitoの汎用 "any() "メソッドを使用する。
2022-04-09 22:15:51
質問
の配列を必要とするメソッドを持つインターフェイスがあります。
Foo
:
public interface IBar {
void doStuff(Foo[] arr);
}
Mockitoを使ってこのインターフェースをモックしています。
doStuff()
が呼び出されましたが、どのような引数が渡されたかは検証したくありません - "don't care"。
を使って、次のようなコードを書くにはどうしたらよいでしょうか。
any()
の代わりに、ジェネリックメソッドである
anyObject()
?
IBar bar = mock(IBar.class);
...
verify(bar).doStuff((Foo[]) anyObject());
解決方法は?
Java 8以降では、引数なしの
any
メソッドを実行すると、コンパイラによって型の引数が推論されます。
verify(bar).doStuff(any());
説明
Java8で新しくなったのは ターゲットタイプ は、そのサブ式の型パラメータを推論するために使用されます。Java 8以前は、メソッドへの引数のみが型パラメータ推論に使用されていました(ほとんどの場合)。
この場合、パラメータの型は
doStuff
のターゲット型になります。
any()
の戻り値の型は
any()
は、その引数の型に合うように選ばれます。
この機構は主にラムダ式をコンパイルできるようにするために追加されたものだが、一般的に型推論を改善するものである。
プリミティブ型
これは残念ながらプリミティブ型では使えません。
public interface IBar {
void doPrimitiveStuff(int i);
}
verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead
問題は、コンパイラが推論する
Integer
の戻り値の型として
any()
. Mockitoはこのことに気づかず(型消去のため)、参照型のデフォルト値である
null
. ランタイムは、返り値をアンボックス化するために
intValue
メソッドに渡す前に
doStuff
という例外がスローされます。
関連
-
[解決済み] 同じメソッドを同じ引数で複数回呼び出した状態でMockitoを使用する
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] モックされたメソッドに渡された引数を返すようにする
-
[解決済み] Mockitoを使用して特定のメソッドが呼び出されていないことを確認するにはどうすればよいですか?
-
[解決済み] 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で拡張子なしのファイル名を取得する方法は?
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない