2013-12-19 2 views
2

NotificationManager.hOCMockObserver: неожиданное уведомление наблюдается

#import <Foundation/Foundation.h> 

@interface NotificationManager : NSObject 

-(void)postNotification; 

@end 

NotificationManager.m

#import "NotificationManager.h" 

@implementation NotificationManager 

-(void)postNotification 
{ 
    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"Some data" forKey:@"TestData"]; 
    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"TestNotification" object:nil userInfo:userInfo]]; 
} 

@end 

испытания Единица измерения:

-(void)testNotification 
{ 
    id observerMock = [OCMockObject observerMock]; 

    [[NSNotificationCenter defaultCenter]addMockObserver:observerMock name:@"TestNotification" object:nil]; 

    [[observerMock expect] notificationWithName:@"TestNotification" object:[OCMArg any]]; 

    NotificationManager * nm= [[NotificationManager alloc]init]; 
    [nm postNotification]; 

    [observerMock verify]; 

    [[NSNotificationCenter defaultCenter] removeObserver:observerMock]; 
} 

Я получаю сообщение об ошибке:

OCMockObserver: обнаружено неожиданное уведомление: NSConcreteNotification 0xfbbad70 {name = TestNotification; userInfo = { TestData = "Некоторые данные"; }}

Если я отправляю уведомление без объекта userInfo (только нуль), тестовые работы. Может кто-нибудь объяснить, почему?

+0

Это очень хорошо спроектированный вопрос. Мне потребовалось всего несколько секунд, чтобы воссоздать вашу проблему с кодом, который вы опубликовали. –

ответ

8

Если вы не указали userInfo, он ожидает значение nil. Измените его на:

[[observerMock expect] notificationWithName:@"TestNotification" object:[OCMArg any] userInfo:[OCMArg any]]; 

Должно пройти.

+0

Отлично! Спасибо. – sash

Смежные вопросы