1

私が見る限り、モックでメソッド呼び出しの順序を確認する方法はありません。
または、何か不足していますか?

- (void)testResetCameraState_resetsCameraView
{
   // Arrange
   [given([_cameraManagerMock previewLayer]) willReturn:_testLayer];

   // Act
   [_cameraInteractor resetCameraState];

   // Assert
   [verifyCount(_cameraViewMock, times(1)) resetPreview];
   [verifyCount(_cameraViewMock, times(1)) setPreviewLayer:_testLayer];
}

この場合、が のsetPreviewLayer:後に呼び出されていることを確認できませんresetPreview

4

1 に答える 1

0

私は解決策を見つけたと思います。これは、このプル リクエストに追加され
たメソッドに基づいています: https://github.com/jonreid/OCMockito/pull/93givenVoid

残念ながらまだマージされていないため、このバージョンを自分でダウンロードしてビルドする必要があります: https://github.com/lysannschlegel/OCMockito/tree/given_void

新しいメソッドを使用すると、次の方法でメソッド呼び出しの順序を確認できます。

- (void)testResetCameraState_resetsCameraView
{
    // Arrange
    [given([_cameraManagerMock previewLayer]) willReturn:_testLayer];
    [givenVoid([self->_cameraViewMock resetPreview]) willDo:^id (NSInvocation *invocation)
     {
         [(MKTBaseMockObject*)self->_cameraViewMock reset];
         return nil;
     }];

    // Act
    [_cameraInteractor resetCameraState];

    // Assert
    [verifyCount(_cameraViewMock, never()) resetPreview];
    [verifyCount(_cameraViewMock, times(1)) setPreviewLayer:_testLayer];
}

これにより、 の最初の呼び出し後にモックがリセットされresetPreviewます。
そのため、その呼び出しの後に内容を確認できます。

  1. resetPreview最初の呼び出しの後に呼び出されることはありません。
  2. setPreviewLayerresetPreview の後に呼び出されます。

このreset呼び出しは もリセットするgivenVoid() willDo:ため、2 回目のreset呼び出しでモックが再度リセットされることはありません。

これが役立つことを願って、幸せなコーディング:D

于 2015-04-20T11:20:57.847 に答える