簡體   English   中英

OCMockito-驗證方法調用的順序

[英]OCMockito - Verify order of method invocations

據我所知,沒有辦法驗證模擬中方法調用的順序。
還是我錯過了什么?

- (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

我想我找到了解決方案。
它基於此請求中添加的givenVoid方法: https : //github.com/jonreid/OCMockito/pull/93

遺憾的是它尚未合並,因此您需要自己下載並構建此版本: 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. setPreviewLayer被resetPreview后調用。

reset調用還會重置給定的givenVoid() willDo:因此,第二個reset調用不會再次重置該模擬。

希望這會有所幫助,祝您編程愉快:D

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM