0

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

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

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

像这样设置我的模拟对象后,

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

我像这样将对象分配给被测类,

taskManager.Whatever = mockTaskManagerDelegate;

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

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

有谁知道如何用 OCMock 做到这一点,或者如果出于某种概念上的原因它是不可能的?

谢谢,

4

2 回答 2

0

OCMock 网站上的功能描述如下: ;-)

“如果 Objective-C 块可用,则可以使用块检查参数,如下所示:

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

这对你有用吗?您是否处于无法使用块的环境中?

于 2012-07-12T15:46:50.397 回答
0

我有同样的要求,所以为它创建了一个类别:

@implementation OCMArg (IsOfClass)

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

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

@end
于 2014-03-03T12:36:18.027 回答