【问题标题】:OCMock: Setup syntax for checking parametersOCMock:检查参数的设置语法
【发布时间】:2012-07-09 12:33:50
【问题描述】:

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

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

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

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

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

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

taskManager.Whatever = mockTaskManagerDelegate;

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

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

有谁知道如何使用 OCMock 做到这一点,或者如果出于某种概念上的原因无法做到这一点?

谢谢,

【问题讨论】:

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


    【解决方案1】:

    OCMock 网站上的功能描述是这样的:;-)

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

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

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

    【讨论】:

      【解决方案2】:

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

      @implementation OCMArg (IsOfClass)
      
      + (id)isOfClass:(Class)aClass
      {
          BOOL (^classCheck)(id) = ^BOOL(id obj) {
              return [obj isKindOfClass:aClass];
          };
      
          return [[OCMBlockConstraint alloc] initWithConstraintBlock:classCheck];
      }
      
      @end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-10
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多