[解決済み] 1回目の呼び出しが失敗し、2回目の呼び出しが成功した場合のシミュレーション
2022-04-25 19:59:47
質問
以下の(簡略化した)コードをMockitoを使ってテストしたいのですが、どうすればいいですか?一回目は失敗し、二回目に成功するようにMockitoに指示する方法がわかりません。
for(int i = 1; i < 3; i++) {
String ret = myMock.doTheCall();
if("Success".equals(ret)) {
log.write("success");
} else if ( i < 3 ) {
log.write("failed, but I'll try again. attempt: " + i);
} else {
throw new FailedThreeTimesException();
}
}
で成功テストを設定できる。
Mockito.when(myMock).doTheCall().thenReturn("Success");
との失敗テスト。
Mockito.when(myMock).doTheCall().thenReturn("you failed");
しかし、1回(または2回)失敗した後に成功すれば問題ないというテストはどのようにすればいいのでしょうか?
どのように解決するのですか?
から ドキュメント :
時には、同じメソッド呼び出しに対して異なる戻り値や例外を持つスタブが必要なことがあります。典型的な使用例としては、イテレータをモックすることです。Mockitoのオリジナル・バージョンには、このような単純なモッキングを促進する機能はありません。例えば、イテレータの代わりに、Iterableや単なるコレクションを使うことができます。これらは自然なスタブ(本物のコレクションを使うなど)の方法を提供します。まれに、連続した呼び出しをスタブすることは有用かもしれませんが。
when(mock.someMethod("some arg")) .thenThrow(new RuntimeException()) .thenReturn("foo"); //First call: throws runtime exception: mock.someMethod("some arg"); //Second call: prints "foo" System.out.println(mock.someMethod("some arg"));
つまり、あなたの場合、欲しいのは
when(myMock.doTheCall())
.thenReturn("You failed")
.thenReturn("Success");
関連
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
eclipse で「アクセス制限: タイプ 'HttpServer' は API ではありません」というプロンプトが表示される。
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
final, finally, finalizeの違いについて話してください。
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
テストが見つかりませんでした
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Dateが型に解決できない問題を解決する
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策