据我所知,没有办法验证模拟器上方法调用的顺序 或者我错过了什么?
- (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
。
答案 0 :(得分: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
后重置模拟
所以我们可以在电话会议后验证内容:
resetPreview
永远不会被调用。setPreviewLayer
。 reset
来电也会重置givenVoid() willDo:
,因此第二次reset
来电不会再次重置模拟。
希望这会有所帮助,快乐的编码:D