OCMock:用于检查参数的设置语法

时间:2012-07-09 12:33:51

标签: objective-c ios cocoa unit-testing ocmock

我正在尝试设置要验证的OCMock。

我有一个协议TaskManagerDelegate,它包含以下方法,

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

设置我的模拟对象后,

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

我将对象分配给这样的测试类,

taskManager.Whatever = mockTaskManagerDelegate;

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

到目前为止,我已经使用OCMArg类来检测是否正在传入参数,但是我很难理解如何检查发送的特定类型是否发送到模拟,或者发送到模拟的对象是否通过某些测试(例如,一个.count恰好是一个)。我来自C#背景,通常使用Moq,您可以使用lamda函数对发送到模拟对象的参数进行特定检查。

是否有人知道如何使用OCMock执行此操作,或者出于某些概念原因无法执行此操作?

谢谢,

2 个答案:

答案 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