2013-06-04 2 views
1

Я использую OCMock, и я пытаюсь сделать что-то вроде этого в одном из моих тестов:OCMock прохождения любого CGSize

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

Проблема заключается в том, что [OCMArg any] возвращает id типа, и я хочу используйте любой CGSize, потому что я не знаю, что это точное значение. Как передать этот аргумент?

+0

Это проблема с OCMock. Тем не менее, насмешливое мнение вообще не должно быть необходимым. Чего вы пытаетесь достичь? –

ответ

5

С версии 2.2 OCMock вы можете использовать ignoringNonObjectArgs

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

ИМХО это должен быть правильный ответ. –

2

AFAIK нет возможности выполнить это с помощью OCMock.

Альтернативой является создание ручной работы. Это подкласс UIScrollView, где вы переопределяете setContentSize:, присваивая данный размер ивару, который позже вы можете проверить.

Другим более простым вариантом является использование реального UIScrollView и прямое подтверждение contentSize - это тот, который вы ожидаете. Я бы пошел на это решение.

+0

Я согласен с тем, что проверка результата изменения размера контента - хороший способ пойти сюда. –

1

К сожалению, вам нужно будет расширить 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 *)0x) 
      return [OCMArg any]; 
     if((pointer != NULL) && (object_getClass((id)pointer) == [OCMPassByRefSetter class])) 
      return (id)pointer; 
    } 
    return value; 
}