我正在嘗試爲我爲AVCaptureVideoPreviewLayer
實施的點擊對焦方法編寫測試。我想使用模擬AVCaptureDevice
爲了通過各種條件,然後確保調用預期的方法來處理實際的聚焦。以下是我正在使用的代碼。用OCMock嘲笑AVCaptureDevice
NSArray *devices = [AVCaptureDevice devices];
for (AVCaptureDevice *device in devices)
{
if ([device hasMediaType:AVMediaTypeVideo])
{
if ([device position] == AVCaptureDevicePositionBack)
{
CGPoint point = CGPointMake(focus_y, 1-focus_x);
if ([device isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus] && [device lockForConfiguration:&error])
{
...
這是測試代碼,我到目前爲止有:
id deviceMock = [OCMockObject niceMockForClass:[AVCaptureDevice class]];
[[[deviceMock stub] andReturnValue:@YES] hasMediaType:AVMediaTypeVideo];
[(AVCaptureDevice*)[[deviceMock stub] andReturnValue:@(AVCaptureDevicePositionBack)] position];
[[[deviceMock stub] andReturnValue:@YES] isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus];
[[[deviceMock stub] andReturnValue:@YES] lockForConfiguration:nil];
[[deviceMock expect] setFocusPointOfInterest:CGPointZero];
[[deviceMock expect] setFocusMode:AVCaptureFocusModeAutoFocus];
[[deviceMock expect] unlockForConfiguration];
[self waitForCompletion:0.55]; //Wait for UI animation
[deviceMock verify]
我想執行三個測試:
- [AVCaptureDevice設備]返回0的設備並沒有任何反應
- [AVCaptureDevice devices]返回一個不兼容的設備,沒有任何反應
- [AVCa ptureDevice設備]返回兼容設備和上面的測試代碼通過
所以我想我的問題歸結爲是有一個簡單的方法存根,並返回[AVCaptureDevice devices]
類的方法?或者是否可以安全地假設在iPhone/iPad
上只有一個AVCaptureDevice
通過上述條件,因此我可以將設備作爲屬性存儲並重寫我正在測試的方法,以便我可以注入模擬AVCaptureDevice
?
你對什麼感到困惑?你能包含你想要執行的測試的僞代碼嗎? –
謝謝我更新了一些更多細節。 – psobko