[解決済み] Mockitoは任意のクラス引数にマッチする
2022-03-10 08:07:01
質問
以下のサンプルルーチンの任意のクラス引数にマッチさせる方法はありますか?
class A {
public B method(Class<? extends A> a) {}
}
どうすれば
<強い
常に
を返します。
new B()
にどのクラスが渡されたかに関係なく
method
? 次の試みは、特定のケースでのみ機能します。
A
がマッチングされます。
A a = new A();
B b = new B();
when(a.method(eq(A.class))).thenReturn(b);
EDIT : 一つの解決策は
(Class<?>) any(Class.class)
解決方法は?
もう2つの方法があります(@Tomasz Nurkiewicz さんの前回の回答に対する私のコメント参照)。
1つ目は、コンパイラが間違った型のものを渡すことを許さないという事実に頼っています。
when(a.method(any(Class.class))).thenReturn(b);
正確な型付けができなくなる(
Class<? extends A>
が、おそらくあなたが必要とするように動作します。
2つ目の方法は、より複雑ですが、以下のような場合、間違いなくより良い解決方法です。
本当に
への引数を確実にしたい。
method()
は
A
またはそのサブクラス
A
:
when(a.method(Matchers.argThat(new ClassOrSubclassMatcher<A>(A.class)))).thenReturn(b);
ここで
ClassOrSubclassMatcher
は
org.hamcrest.BaseMatcher
と定義されています。
public class ClassOrSubclassMatcher<T> extends BaseMatcher<Class<T>> {
private final Class<T> targetClass;
public ClassOrSubclassMatcher(Class<T> targetClass) {
this.targetClass = targetClass;
}
@SuppressWarnings("unchecked")
public boolean matches(Object obj) {
if (obj != null) {
if (obj instanceof Class) {
return targetClass.isAssignableFrom((Class<T>) obj);
}
}
return false;
}
public void describeTo(Description desc) {
desc.appendText("Matches a class or subclass");
}
}
ふっふっふっふっ。私なら、最初の選択肢で、あなたが
本当に
をより細かく制御する必要があります。
method()
が実際に返すものです :-)
関連
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] 引数とパラメータの違いは何ですか?
-
[解決済み] モックされたメソッドに渡された引数を返すようにする
-
[解決済み] Mockitoを使用して特定のメソッドが呼び出されていないことを確認するにはどうすればよいですか?
-
[解決済み] なぜJava 8のOptionalは引数で使ってはいけないのか
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] mavenのコンパイルに失敗するのはなぜですか?
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] Javaでdoubleをfloatに変換する