我正在尝试设置要验证的OCMock。
我有一个协议TaskManagerDelegate
,它包含以下方法,
- (void) addTasks:(NSArray * ) tasksToAdd;
设置我的模拟对象后,
id mockTaskManagerDelegate = [OCMockObject mockForProtocol:@protocol(TaskManagerDelegate)];
我将对象分配给这样的测试类,
taskManager.Whatever = mockTaskManagerDelegate;
我在taskManager上调用一个方法,然后想验证在TaskManagerDelegate上调用了addTasks方法,并且传递给它的数组只包含一个对象。
到目前为止,我已经使用OCMArg类来检测是否正在传入参数,但是我很难理解如何检查发送的特定类型是否发送到模拟,或者发送到模拟的对象是否通过某些测试(例如,一个.count恰好是一个)。我来自C#背景,通常使用Moq,您可以使用lamda函数对发送到模拟对象的参数进行特定检查。
是否有人知道如何使用OCMock执行此操作,或者出于某些概念原因无法执行此操作?
谢谢,
答案 0 :(得分:0)
OCMock网站上的功能描述包括:; - )
“如果Objective-C块可用,则可以使用块检查参数,如下所示:
[[mock expect] someMethod:[OCMArg checkWithBlock:^(id value) { /* return YES if value is ok */ }]];
这对你有用吗?您是否处于无法使用区块的环境中?
答案 1 :(得分:0)
我有相同的要求,因此为它创建了一个类别:
@implementation OCMArg (IsOfClass)
+ (id)isOfClass:(Class)aClass
{
BOOL (^classCheck)(id) = ^BOOL(id obj) {
return [obj isKindOfClass:aClass];
};
return [[OCMBlockConstraint alloc] initWithConstraintBlock:classCheck];
}
@end