【问题标题】:OCMock passing any CGSizeOCMock 传递任何 CGSize
【发布时间】:2013-05-30 17:56:34
【问题描述】:

我正在使用 OCMock,我正在尝试在我的一项测试中做这样的事情:

[[mockScrollView expect] setContentSize:[OCMArg any]];

问题是[OCMArg any] 返回一个id 类型,我想使用任何CGSize,因为我不知道它的确切值。我怎样才能通过这个论点?

【问题讨论】:

  • 这是 OCMock 的问题。也就是说,通常不需要模拟视图。你想达到什么目的?

标签: ios unit-testing primitive-types ocmock cgsize


【解决方案1】:

使用 OCMock 2.2 版,您可以使用 ignoringNonObjectArgs

[[mockScrollView expect] ignoringNonObjectArgs] setContentSize:dummySize];

【讨论】:

    【解决方案2】:

    AFAIK 没有办法使用 OCMock 来实现。

    另一种方法是创建一个手工制作的模型。这是UIScrollView 的子类,您可以在其中覆盖setContentSize:,将给定的大小分配给稍后您可以检查的ivar。

    其他更简单的选择是使用真正的UIScrollView 并直接检查contentSize 是否是您所期望的。我会选择这个解决方案。

    【讨论】:

    • 我同意检查内容大小变化的结果是一个很好的方法。
    【解决方案3】:

    遗憾的是,您似乎必须扩展 OCMock 才能完成此操作。你可以按照这个模式...

    OCMArg.h

    // Add this:
    + (CGSize)anyCGSize;
    

    OCMArg.c

    // Add this:
    + (CGSize)anyCGSize
    {
        return CGSizeMake(0.1245, 5.6789);
    }
    
    // Edit this method:
    + (id)resolveSpecialValues:(NSValue *)value
    {
        const char *type = [value objCType];
    
        // Add this:
        if(type[0] == '{')
        {
            NSString *typeString = [[[NSString alloc] initWithCString:type encoding:NSUTF8StringEncoding] autorelease];
            if ([typeString rangeOfString:@"CGSize"].location != NSNotFound)
            {
                CGSize size = [value CGSizeValue];
                if (CGSizeEqualToSize(size, CGSizeMake(0.1245, 5.6789)))
                {
                    return [OCMArg any];
                }
            }
        }
    
        // Existing code stays the same...
        if(type[0] == '^')
        {
            void *pointer = [value pointerValue];
            if(pointer == (void *)0x01234567)
                return [OCMArg any];
            if((pointer != NULL) && (object_getClass((id)pointer) == [OCMPassByRefSetter class]))
                return (id)pointer;
        }
        return value;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多