1

に実装したタップしてフォーカスする方法のテストを作成しようとしてい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]

3 つのテストを実行したいと思います。

  • [AVCaptureDevice devices] は 0 デバイスを返し、何も起こりません
  • [AVCaptureDevice devices] は互換性のないデバイスを返し、何も起こりません
  • [AVCaptureDevice devices] は互換性のあるデバイスを返し、上記のテスト コードはパスします

私の質問は、[AVCaptureDevice devices]クラスメソッドをスタブして返す簡単な方法はありますか? AVCaptureDeviceまたは、上記の条件に合格するのは1 つだけであると想定してiPhone/iPad、デバイスをプロパティとして保存し、テストしているメソッドを書き直して、モックを注入できるようにしても安全AVCaptureDeviceですか?

4

1 に答える 1