2013-03-26 7 views
1

reportIssue이 호출 된 후 NSNotification이 전송되는지 확인하려고합니다. APHIssueComposer.m에서NSNotification 배달 테스트

error: -[APHIssueComposerTests testPopulatedIssueIsReceived] : OCMockObject[APHIssueComposerTests]: expected method was not invoked: reportIssueNotificationReceived 

:

- (void) reportIssue { 
    APHIssue* issue = [self issue]; 

    NSNotification* notification = [NSNotification notificationWithName:APHLogDataObjectNotification object:issue]; 
    [[NSNotificationQueue defaultQueue] enqueueNotification:notification postingStyle:NSPostWhenIdle]; 

    [self discardIssue]; 
} 

APHIssueComposerTests.m에서 :

- (void)setUp 
{ 
    [super setUp]; 
    self.mockObserver = [OCMockObject mockForClass:[self class]]; 
    [[NSNotificationCenter defaultCenter] addObserver:self.mockObserver 
              selector:@selector(reportIssueNotificationReceived) 
               name:APHLogDataObjectNotification 
              object:nil]; 
    self.issueComposer = [[APHIssueComposer alloc] initWithTempDirectory:@"/my/fake/directory"]; 
} 

- (void)testPopulatedIssueIsReceived 
{ 
    [[self.mockObserver expect] reportIssueNotificationReceived]; 
    self.issueComposer.message = @"fake message."; 
    [self.issueComposer reportIssue]; 
    [mockObserver verify]; 
    [[NSNotificationCenter defaultCenter] removeObserver:mockObserver name:APHLogDataObjectNotification object:nil]; 
} 

- (void)tearDown 
{ 
    [super tearDown]; 
    [[NSNotificationCenter defaultCenter] removeObserver:mockObserver name:APHLogDataObjectNotification object:nil]; 
} 

왜 mock 객체는 통지를받지 않습니다

나는이 오류 ?

답변

1

문제는 enqueueNotification이 비동기입니다.

+0

예. 이러한 상황에 대해 나는 AndDo에 이해가된다고 생각합니다 : __block BOOL을 설정 한 mockObserver를 차단 한 다음 해당 값에 대한 시간 초과로 스핀 대기합니다. –