[解決済み】Mockitoのモックオブジェクトが次に呼び出されたときに異なるものを返すように指示するには?
2022-04-01 21:49:28
質問
そこで、モックオブジェクトをクラスレベルの静的変数として以下のように作成しています。 あるテストでは
Foo.someMethod()
はある値を返すようにし、別のテストでは別の値を返すようにしたい。 問題は、これを正しく動作させるためには、モックを再構築する必要があるようなのです。 モックの再構築を避け、各テストで同じオブジェクトを使用したいと思います。
class TestClass {
private static Foo mockFoo;
@BeforeClass
public static void setUp() {
mockFoo = mock(Foo.class);
}
@Test
public void test1() {
when(mockFoo.someMethod()).thenReturn(0);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value
}
@Test
public void test2() {
when(mockFoo.someMethod()).thenReturn(1);
TestObject testObj = new TestObject(mockFoo);
testObj.bar(); // calls mockFoo.someMethod(), STILL receiving 0 as the value, instead of expected 1.
}
}
2番目のテストでは、testObj.bar()が呼ばれたときに、値として0を受け取ったままです...。これを解決する最善の方法は何でしょうか? の別のモックを使用することができることを知っていることに注意してください。
Foo
をテストするたびに、複数のリクエストを連鎖させなければなりません。
mockFoo
つまり、各テストでチェーニングを行う必要があるのです。
解決方法は?
まず、モックを静的なものにしないことです。プライベートフィールドにしましょう。setUpクラスを
@Before
ではなく
@BeforeClass
. 何度も走るかもしれないけど、安いんだよ。
次に、今ある方法は、モックがテストによって異なるものを返すようにするための正しい方法です。
関連
-
[解決済み] mockitoで最終クラスをモックする方法
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] 文字列の巻き方
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] Mavenに最新バージョンの依存関係を使用するように指示するにはどうすればよいですか?
-
[解決済み] Mockitoを使用して特定のメソッドが呼び出されていないことを確認するにはどうすればよいですか?
-
[解決済み] Mockito : メソッド内で生成されたオブジェクトでメソッドが呼び出されたことを確認する方法?
-
[解決済み] mockito verify()でメソッドが2回呼び出されたことを確認する方法
-
[解決済み] モックの実装を単体テストごとに変更する方法【Jestjs
-
[解決済み] Python のモック patch.object を使って、他のメソッド内で呼び出されたメソッドの戻り値を変更する。
最新
-
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で拡張子なしのファイル名を取得する方法は?
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] このフォーマット(Tue Jul 13 00:00:00 CEST 2010)の日付をJavaの日付に変換する方法(文字列はalfrescoのプロパティに由来しています)
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]