Kiwi 监视多个 NSNotifications
Kiwi spying on multiple NSNotifications
我目前正在像这样监视 postNotification
__block KWCaptureSpy *notificationSpy = [[NSNotificationCenter
defaultCenter] captureArgument:@selector(postNotification:) atIndex:0];
问题是我有多个通知名称不同的通知。如何访问间谍的不同通知参数。
例如,我有 Notification1 和 Notification2,间谍参数捕获了 Notification1,但我无法捕获 Notification2。
关于如何做到这一点有什么想法吗?
我最终使用的解决方案是
__block NSMutableArray *notifications = [[NSMutableArray alloc] init];
[[NSNotificationCenter defaultCenter] stub:@selector(postNotification:) withBlock:^id(NSArray *params) {
[notifications addObject:params[0]];
return nil;
}];
我想到了两种方法:
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"]];
附带说明一下,您不需要用 __block
修饰 notifications
变量,因为您不需要更改该变量的内容(即指针值) .
我目前正在像这样监视 postNotification
__block KWCaptureSpy *notificationSpy = [[NSNotificationCenter
defaultCenter] captureArgument:@selector(postNotification:) atIndex:0];
问题是我有多个通知名称不同的通知。如何访问间谍的不同通知参数。
例如,我有 Notification1 和 Notification2,间谍参数捕获了 Notification1,但我无法捕获 Notification2。
关于如何做到这一点有什么想法吗?
我最终使用的解决方案是
__block NSMutableArray *notifications = [[NSMutableArray alloc] init];
[[NSNotificationCenter defaultCenter] stub:@selector(postNotification:) withBlock:^id(NSArray *params) {
[notifications addObject:params[0]];
return nil;
}];
我想到了两种方法:
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"]];
附带说明一下,您不需要用 __block
修饰 notifications
变量,因为您不需要更改该变量的内容(即指针值) .