2012-10-30 1 views
0

간단한 오디오 테스트를 통해 audioController에서 주파수 값을 올바르게 수신하고 있는지 확인하려고합니다. 내보기에서블록 컨텍스트에서 OCMock

나는 설정까지 블록 콜백이 같은 통화를하고 내 오디오 컨트롤러에서

- (void) registerVolumeCallback { 
     NSNumberBlock frequencyCallback = ^(NSNumber *frequency) { 
      self.currentFrequency = frequency; 
     }; 
     self.audioController.frequencyCallback = frequencyCallback; 
    } 

는 주파수 콜백 블록은 주파수를 포함하는의 NSNumber 호출됩니다.

- (void) testFrequencyAudioServiceCallbackActive { 
      OCMockObject *mockEqualizer = [OCMockObject partialMockForObject:self.testEqualizer]; 
      [[[mockEqualizer stub] andCall:@selector(mockDidUpdateFrequency:) 
         onObject:self] setCurrentFrequency:[OCMArg any]]; 
      [self.testEqualizer startAnimating]; 
      [ mockEqualizer verify]; 
    } 

그리고 : 내 테스트에서

내가 다음이 파일

테스트 이퀄라이저는 상기 뷰의 인스턴스
- (void) mockDidUpdateFrequency: (NSNumber *) frequency { 
     GHAssertTrue((frequency!= nil), @"Audio Service is messing up"); 
    } 

. 그래서 여기에 약간의 혼란을 주려고 노력하고 있습니다. 문제는 mockDidUpdateFrequency가 호출되지 않는다는 것입니다. 나는 퍼팅 시도 : 블록의

self.currentFrequency = frequency; 

외부와 스위 즐링 발생합니까 내가 mockDidUpdateFrequency로 전화를받을 수 있나요. 나는 또한 시도했다 :

- (void) registerVolumeCallback { 
    __block UIEqualizer *blockSafeSelf = self; 
    NSNumberBlock frequencyCallback = ^(NSNumber *frequency) { 
     blockSafeSelf.currentFrequency = frequency; 
    }; 
    self.audioController.frequency = frequencyCallback; 
} 

운 없음. 일부 이상한 인스턴스 물건은 내가 알지 못하는 블록 컨텍스트에서 진행됩니다. 누구든지 무슨 일이 일어나는 지 알아?

답변

0

확실한 답을 얻으려면 자세한 내용을 제공해야합니다. 예를 들어 registerVolumeCallback은 어떻게 호출됩니까? 그리고 frequencyCallback 자신의 코드 또는 제 3 자 API입니까?

제공하신 내용에 따라 frequencyCallback이 비동기 호출로 의심됩니다. 따라서 startAnimating이 결국 호출 될 조건을 만들지 만 콜백이 호출되기 전에 즉시 모의를 확인합니다. 테스트가 원하는대로 수행되도록하려면 해당 블록이 실행되는 대기열을 이해하고 실행 기회를 제공해야합니다. 이 메인 큐에 비동기 적으로 호출 인 경우

, 당신은 verify를 호출하기 전에 메인 실행 루프 스핀을 할 수 있습니다

[self.testEqualizer startAnimating]; 
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.1]]; 
[mockEqualizer verify]; 

를이 다른 큐에 호출 있다면, 당신은 몇 가지 다른 옵션을 가지고 있지만, 그것은 도움이 될 것이다 코드가 어떻게 구조화되어 있는지 명확하게 알 수 있습니다.

+0

감사합니다. 내 audiocontroller에서 수행하고 있던 비동기식 작업과 관련이 있습니다. –