OCMock通过任何CGSize

我正在使用OCMock,我试图在我的一个testing中做到这样的事情:

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

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

使用OCMock 2.2版本,你可以使用ignoringNonObjectArgs

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

AFAIK有没有办法与OCMock完成。

另一种方法是创build一个手工制作的模拟。 这是UIScrollView一个子类,您可以重写setContentSize:将给定的大小赋给一个后来可以检查的ivar。

其他更简单的select是使用真正的UIScrollView并直接检查是contentSize是你所期望的。 我会去这个解决scheme。

可悲的是,看起来你必须扩展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; }