さまざまなテストを実行するさまざまなメソッドを持つJUnitクラスがあります。
Mockitoを使用して実際のインスタンスにスパイを作成し、実行する実際のテストに関連しないいくつかのメソッドをオーバーライドします。
テスト後に実行される他のいくつかのテストも同じインスタンスを使用し、モックするように要求しなかったモックメソッドを実行してメソッドのモックを解除する場合に備えて、私を後片付けするための方法はありますか?
'wareHouseSpy'というスパイオブジェクトがあるとします
メソッドをオーバーライドしたと言いますisSomethingMissing:
doReturn(false).when(wareHouseSpy).isSomethingMissing()
オーバーライドを解除してスパイで通常の状態に戻す正しい方法、つまりisSomethingMissingの次の呼び出しで実際のメソッドを実行する正しい方法?
何かのようなもの
doReturn(Mockito.RETURN_REAL_METHOD).when(wareHouseSpy).isSomethingSpy()
または多分
Mockito.unmock(wareHouseSpy)
知るか?そのエリアには何も見つかりませんでした
ありがとう!
アサフ
おもう
Mockito.reset(wareHouseSpy)
それを行うでしょう。
ほとんどのテストでスタブ化された応答を使用するとします。次に、次のようなsetUp()メソッドがあります。
@Before
public void setUp() {
wareHouseSpy = spy(realWarehouse);
doReturn(false).when(wareHouseSpy).isSomethingMissing();
}
ここで、スタブ化された応答を元に戻し、実際の実装を1つのテストで使用するとします。
@Test
public void isSomethingMissing_useRealImplementation() {
// Setup
when(wareHouseSpy.isSomethingMissing()).thenCallRealMethod();
// Test - Uses real implementation
boolean result = wareHouseSpy.isSomethingMissing();
}
TestNGとJUnitのどちらでテストするかによって異なります。
@BeforeMethod
_または_@AfterMethod
_のMockito.reset(mockA, mockB, ...)
を使用してモックをリセットする必要がありますたぶん私はフォローしていませんが、実際のオブジェクトreal
がある場合:
Object mySpy = spy(real);
次に、「nspy "mySpy
... _real
を使用します。
「通常の」方法は、「setUp」メソッドでインスタンスを再インスタンス化することです。ただし、なんらかの理由で構築にコストがかかる実際のオブジェクトがある場合は、次のようにすることができます。
public class MyTests {
private static MyBigWarehouse realWarehouse = new MyBigWarehouse();
private MyBigWarehouse warehouseSpy;
@Before
public void setUp() {
warehouseSpy = spy(realWarehouse); // same real object - brand new spy!
doReturn(false).when(wareHouseSpy).isSomethingMissing();
}
@Test
...
@Test
...
@Test
...
}
この部分への具体的な対応:
テスト後に実行される他のいくつかのテストも同じインスタンスを使用し、モックするように要求しなかったモックメソッドを実行してメソッドのモックを解除する場合に備えて、私を後片付けするための方法はありますか?
JUnitを使用している場合、これを行う最もクリーンな方法は、@Before
および@After
(他のフレームワークには同等のものがあります)を使用し、インスタンスとスパイを再作成して、テストが依存しない、または影響を受けないようにすることです。あなたは他のどんなテストでもしました。次に、各テスト内でスパイ/モックのテスト固有の構成を行うことができます。何らかの理由でオブジェクトを再作成したくない場合は、スパイを再作成できます。いずれにせよ、誰もが毎回新鮮なスパイから始めます。