OCMock通过任何CGSize
我正在使用OCMock,我试图在我的一个testing中做到这样的事情:
[[mockScrollView expect] setContentSize:[OCMArg any]];
问题是[OCMArg any]
返回一个id
types,我想使用任何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; }