我正在尝试为我为AVCaptureVideoPreviewLayer
. 我想使用一个模拟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 devices] 返回 0 个设备,没有任何反应
- [AVCaptureDevice devices] 返回一个不兼容的设备并且没有任何反应
- [AVCaptureDevice devices] 返回兼容设备,上面测试代码通过
所以我想我的问题归结为是否有一种简单的方法来存根和返回[AVCaptureDevice devices]
类方法?或者可以安全地假设只有一个AVCaptureDevice
通过iPhone/iPad
上述条件,所以我可以将设备存储为属性并重写我正在测试的方法,以便我可以注入模拟AVCaptureDevice
?