2012-07-09 59 views
0

我想设置一个OCMock来验证。OCMock:检查参数的安装语法

我有一个协议,TaskManagerDelegate,包含下面的方法,

- (void) addTasks:(NSArray *) tasksToAdd; 

设置我的模拟对象像在此之后,

id mockTaskManagerDelegate = [OCMockObject mockForProtocol:@protocol(TaskManagerDelegate)]; 

我分配对象到类被测样这个,

taskManager.Whatever = mockTaskManagerDelegate; 

我在我的taskManager上调用了一个方法,并且t它想要验证TaskManagerDelegate上调用的addTasks方法,并且传递给它的数组只包含一个对象。

到目前为止,我已经使用OCMArg类来检测参数是否被传入,但我正在努力了解如何检查发送的特定类型是发送到模拟,还是发送到模拟通过的对象某些测试(例如只有一个.count)。我来自C#背景,通常会使用Moq,您可以在其中使用lamda函数对发送到模拟对象的参数执行特定的检查。

是否有人知道如何与OCMock做到这一点,或者如果由于某种概念上的原因,这是不可能做到的?

谢谢,

回答

0

在OCMock网站的特征的描述具有这样的:;-)

“如果Objective-C的块是可用的,可以与块查询的参数,如下所示:

[[mock expect] someMethod:[OCMArg checkWithBlock:^(id value) { /* return YES if value is ok */ }]]; 

会为你工作?你的环境下块不可用?

0

我有相同的要求,因此创建了一个类别:

@implementation OCMArg (IsOfClass) 

+ (id)isOfClass:(Class)aClass 
{ 
    BOOL (^classCheck)(id) = ^BOOL(id obj) { 
     return [obj isKindOfClass:aClass]; 
    }; 

    return [[OCMBlockConstraint alloc] initWithConstraintBlock:classCheck]; 
} 

@end