2013-06-04 21 views
1

我使用OCMock我試圖做這樣的事情在我的測試之一:OCMock傳遞任何CGSize

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

的問題是,[OCMArg any]返回id類型,我想使用任何CGSize,因爲我不知道它是確切的價值。我怎麼能通過這個論點?

+0

這是OCMock的問題。也就是說,嘲笑一種觀點通常不是必要的。你想達到什麼目的? –

回答

5

隨着OCMock的2.2版本,你可以使用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; 
}