2009-07-27 2 views
2

특정 알림이 게시 될 때까지 대기/대기하는 가장 좋은 방법은 무엇입니까?특정 알림이 Cocoa에 게시 될 때까지 차단하는 방법은 무엇입니까?

NSNotification에서 데이터를 가져 오는 비동기 API 클래스가 있는데 (알림은 코코아에서 가져온 것입니다. 피할 수는 없지만) 단위 테스트가 필요합니다. 런 루프 알림의 처리없이

[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]] 

이 수신되지 않습니다

은 지금까지 나는 반 바쁜 대기를 알아 냈어요. 하지만 원하는 알림이 오면 즉시 실행 루프를 중단 할 수 있습니까?

+0

비슷한 질문은 http://stackoverflow.com/questions/1557070/how-to-pause-an-nsthread-until-notified – paulmelnikow

답변

2

runMode : beforeDate : 루프를 한 번만 실행하므로 해당 호출을 루프에서 사용할 수 있습니다. 통지가 처리되었음을 감지합니다 (다른 것이 없으면 처리기가 테스트 클래스의 멤버 변수를 YES로 반전시킬 수 있음).

1

코드의 알림에 대한 반응을 테스트하는 단위 일 경우 스레드를 잠자기 상태로 만드는 것이 과도 할 수 있습니다. 몇 가지 질문이 떠오릅니다 ...

  1. 알림 응답이 합격 또는 불합격 여부를 테스트하는 방법 - 테스트 할 수있는 측정 가능한 부작용이 있습니까?
  2. 응답을 측정하기 위해 NSNotification을 보낼 수 있습니까? (당신은 NSRunLoop가 보통 그것을 처리한다고 언급하지만, 당신이 통지를 모의 할 수 있다면 테스트는 더 예측 가능할 것입니다.)
  3. 어떤 이유로 알림이 전송되는지 테스트하려고한다면, 필요한 것? (자동 일 경우 신경 쓰지 않아도됩니다. 단위 테스트는 단단 할 수 있지만 조롱하면 일을 단순화 할 수 있습니다.)

테스트를 위해 실제로 멀티 스레드 시나리오를 만들어야하는 경우 예를 들어 this unit test codetestLockUnlock을보실 수 있습니다. (그냥 내 코드가 컬렉션 또는 일반화 된 가변 객체에 내장 된 잠금을 제대로 사용하는지 확인하려고했습니다.)