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

我想我找到了解决办法。
它基于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

于 2015-04-20T11:20:57.847 回答