2014-01-07 7 views
1

AVCaptureVideoPreviewLayer에 대해 구현 한 탭 - 투 - 포커스 메서드에 대한 테스트를 작성하려고합니다. 다양한 조건을 전달하기 위해 모의 객체 AVCaptureDevice을 사용하고 실제 포커스를 처리하기 위해 예상되는 메소드가 호출되는지 확인합니다. 아래 코드는 제가 사용하고있는 코드입니다.OCMock으로 AVCaptureDevice 조롱

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 장치를 반환하고 아무것도
  • 을 발생
    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]) 
          { 
          ... 
    

    는 지금까지이 테스트 코드입니다
  • [AVCaptureDevice devices]가 호환되지 않는 장치를 반환하고 아무 반응이 없습니다.
  • [AVCa ptureDevice 장치] 호환 장치와 위의 테스트 코드는

을 통과 반환 그래서 스텁과 [AVCaptureDevice devices] 클래스 메서드를 반환 할 수있는 쉬운 방법이 내 질문에 귀결 것 같아요? 또는 위의 조건을 통과하는 iPhone/iPadAVCaptureDevice이 하나만 있다고 가정하는 것이 안전합니까? 그러면 장치를 속성으로 저장하고 내가 작성한 테스트 메서드를 다시 작성할 수 있습니다. AVCaptureDevice?

+0

무엇에 대해 혼란스러워합니까? 수행하려는 테스트의 의사 코드를 포함시킬 수 있습니까? –

+0

감사합니다. 좀 더 자세한 내용으로 내 질문을 업데이트했습니다. – psobko

답변

1

클래스 메서드 "devices"를 스텁하여 원하는 내용으로 배열을 반환 할 수 있습니다.

id deviceMock = [OCMockObject niceMockForClass:[AVCaptureDevice class]]; 

// I think you need to change your return value code to this for the booleans: 
[[[deviceMock stub] andReturnValue:OCMOCK_VALUE((BOOL){YES})] hasMediaType:AVMediaTypeVideo]; 
[[[deviceMock stub] andReturnValue:OCMOCK_VALUE((BOOL){YES})] isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus]; 
[[[deviceMock stub] andReturnValue:OCMOCK_VALUE((BOOL){YES})] lockForConfiguration:nil]; 

// No need to wrap the position in an NSNumber 
[(AVCaptureDevice*)[[deviceMock stub] andReturnValue:AVCaptureDevicePositionBack] position]; 

// Stub the class method that returns the devices array 
[[[deviceMock stub] andReturn:@[ deviceMock ]] devices]; 

[[deviceMock expect] setFocusPointOfInterest:CGPointZero]; 
[[deviceMock expect] setFocusMode:AVCaptureFocusModeAutoFocus]; 
[[deviceMock expect] unlockForConfiguration]; 
[self waitForCompletion:0.55]; //Wait for UI animation 
[deviceMock verify] 

나는 여러분을 길로 인도해야한다고 생각합니다.

+0

완벽 함 나는 시험을 조금 늘렸고 이제 모든 것이 녹색이다. 고맙습니다. – psobko