首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCMockito -验证方法调用的顺序

OCMockito -验证方法调用的顺序
EN

Stack Overflow用户
提问于 2015-04-20 10:45:47
回答 1查看 344关注 0票数 1

据我所见,无法验证模拟中方法调用的顺序。

还是我漏掉了什么?

代码语言:javascript
复制
- (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之后调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-20 11:20:57

我想我找到了解决办法。

它基于在这个拉请求中添加的givenVoid方法:https://github.com/jonreid/OCMockito/pull/93

遗憾的是,它还没有被合并,所以您需要自己下载并构建这个版本:void

使用新方法,您可以通过以下方式验证方法调用的顺序:

代码语言:javascript
复制
- (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调用不会再次重置reset

希望这有帮助,快乐的编码:D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29745716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档