新西兰人监视多个NSNotifications

时间:2015-05-19 17:10:45

标签: objective-c nsnotification kiwi

我目前正在监视postNotification这样的

__block KWCaptureSpy *notificationSpy = [[NSNotificationCenter 
defaultCenter] captureArgument:@selector(postNotification:) atIndex:0];

问题是我有多个不同通知名称的通知。如何访问间谍的参数以获得不同的通知。

例如说我有Notification1和Notification2,spy参数捕获Notification1但我无法捕获Notification2。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

我想到了两种方法:

  • stub sendNotification:方法,并使用已发送的通知构建数组:

    NSMutableArray *sentNotifications = [NSMutableArray array];        
    [[NSNotificationCenter defaultCenter] stub:@selector(postNotification:) withBlock:^id(NSArray *params) {
        NSNotification *notification = params[0];
        [sentNotifications addObject:notification.name];
        return nil;
    }];
    [[sentNotifications shouldEventually] equal:@[@"TestNotification1", @"TestNotification2"]];
    

    如果通知并非总是以相同的顺序发送,您可能需要另一个匹配器,然后是equal:

  • 编写一个注册为观察者的自定义匹配器,并在询问收到的通知时进行评估:

    @interface MyNotificationMatcher : KWMatcher
    - (void)sendNotificationNamed:(NSString*)notificationName;
    - (void)sendNotificationsNamed:(NSArray*)notificationNames;
    @end
    

    可以在你的测试中使用:

    [[[NSNotificationCenter defaultCenter] shouldEventually] sendNotificationsNamed:@[@"TestNotification1", @"TestNotification2"]];
    

作为旁注,您不需要使用notifications修饰__block变量,因为您不需要更改该变量的内容(即指针)值)。

答案 1 :(得分:0)

我最终使用的解决方案是

__block NSMutableArray *notifications = [[NSMutableArray alloc] init];
        [[NSNotificationCenter defaultCenter] stub:@selector(postNotification:) withBlock:^id(NSArray *params) {
            [notifications addObject:params[0]];
            return nil;
        }];