我正在使用OCMock,并在我的一个测试中尝试这样做:
[[mockScrollView expect] setContentSize:[OCMArg any]];问题是[OCMArg any]返回一个id类型,而我想使用任何CGSize,因为我不知道它的确切值。我如何传递这个参数呢?
发布于 2013-07-05 04:26:09
在2.2版的OCMock中,您可以使用ignoringNonObjectArgs
[[mockScrollView expect] ignoringNonObjectArgs] setContentSize:dummySize];发布于 2013-06-05 00:55:22
使用OCMock是无法做到这一点的。
另一种选择是创建一个手工制作的模拟。这是UIScrollView的一个子类,您可以在其中覆盖setContentSize:,将给定的大小分配给稍后可以检查的ivar。
另一个更简单的选择是使用真实的UIScrollView,并直接检查contentSize是否为您所期望的。我会选择这个解决方案。
发布于 2013-06-05 01:16:05
遗憾的是,看起来您必须扩展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;
}https://stackoverflow.com/questions/16916115
复制相似问题