1

私はOCMockを使用しており、テストの1つで次のようなことをしようとしています:

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

問題は[OCMArg any]、型を返すことです。正確な値がわからないため、idany を使用したいと思います。CGSizeこの引数を渡すにはどうすればよいですか?

4

3 に答える 3

2

私の知る限り、OCMock でそれを達成する方法はありません。

別の方法は、手作りのモックを作成することです。これは、後で検査できる ivar に特定のサイズを割り当てることUIScrollViewをオーバーライドする場所のサブクラスです。setContentSize:

他の簡単なオプションは、実数を使用してUIScrollView直接確認するcontentSizeことです。それはあなたが期待するものです。私はこの解決策に行きます。

于 2013-06-04T16:55:22.200 に答える
1

残念ながら、これを実現するには OCMock を拡張する必要があるようです。あなたはこのパターンに従うことができます...

OCMArg.h

// Add this:
+ (CGSize)anyCGSize;

OCArg.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;
}
于 2013-06-04T17:16:05.497 に答える