在我正在测试的代码中,我有一个 NSPredicate 并且我正在过滤一个数组:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"status == %d || status == %d", FVFileReadyStatus, FVFileWaitingStatus];
[myArray filterUsingPredicate:predicate];
我有一个方法来返回一个模拟,最终将被添加到myArray
. FVFileStatus
是一个 typedef 枚举。因为我使用的是谓词,所以谓词是 call valueForKey
,所以我需要把它存根:
-(id)mockFVFileHandleWithStatus:(FVFileStatus)status {
id mock = [OCMockObject mockForClass:[FVFileHandle class]];
[[[mock stub] andReturnValue:OCMOCK_VALUE(status)] valueForKey:[OCMArg checkWithSelector:@selector(isEqualToString:) onObject:@"status"]];
return mock;
}
当我运行我的测试时,它在过滤器上失败了。我得到一个NSInvalidArgumentException - Reason: Return value does not match method signature
.
我不确定如何设置存根,以便它可以与 NSPredicate 一起使用。
有人可以帮忙吗?