44

JUnit テストでMockito フレームワークを使用して Mock オブジェクトを作成しています。各モックは呼び出されたメソッドを認識しているため、テスト中に次のように記述できます。

verify(myMock, atLeastOnce()).myMethod();

それが何を呼んだかについてのこの内部の模擬知識が私のテストを通して持続するかどうか疑問に思っていますか? verifyそれでも問題が解決しない場合は、2 つのテストで同じ方法を使用すると、誤検知が発生する可能性があります。

コード例

@RunWith(MockitoJUnitRunner.class)
public class EmrActivitiesImplTest {
    
    @Mock private MyClass myMock;
    
    @Before
    public void setup() {
        when(myMock.myMethod()).thenReturn("hello");
    }
    
    @Test
    public void test1() {
        // ..some logic
        verify(myMock, atLeastOnce()).myMethod();
    }
    
    @Test
    public void test2() {
        // ..some other logic
        verify(myMock, atLeastOnce()).myMethod();
    }  
}

モック状態は永続化されます - test1 の検証メソッドが成功したため、test2 は関係なく成功します。

モックの状態がリセットされます - myMock.myMethod() が呼び出されない場合、test2 は失敗します

4

3 に答える 3