据我所见,无法验证模拟中方法调用的顺序。
还是我漏掉了什么?
- (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之后调用。
发布于 2015-04-20 11:20:57
我想我找到了解决办法。
它基于在这个拉请求中添加的givenVoid方法:https://github.com/jonreid/OCMockito/pull/93
遗憾的是,它还没有被合并,所以您需要自己下载并构建这个版本: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的第一次调用之后重置模拟。
这样我们就可以在那次电话之后核实一下:
resetPreview从未在第一次调用之后被调用。setPreviewLayer是在resetPreview之后调用的。reset调用还重置givenVoid() willDo:,以便第二个reset调用不会再次重置reset。
希望这有帮助,快乐的编码:D
https://stackoverflow.com/questions/29745716
复制相似问题