我使用OCMock我试图做在我的测试之一是这样的:
[[mockScrollView expect] setContentSize:[OCMArg any]];
问题是, [OCMArg any]
返回一个id
类型,我想用任何CGSize
,因为我不知道它的确切价值千万。 如何传递这个说法?
我使用OCMock我试图做在我的测试之一是这样的:
[[mockScrollView expect] setContentSize:[OCMArg any]];
问题是, [OCMArg any]
返回一个id
类型,我想用任何CGSize
,因为我不知道它的确切价值千万。 如何传递这个说法?
随着OCMock的2.2版本,你可以使用ignoringNonObjectArgs
[[mockScrollView expect] ignoringNonObjectArgs] setContentSize:dummySize];
据我所知是没有办法来实现这一目标与OCMock。
另一种方法是创建一个手工制作的模拟。 这是一个子类UIScrollView
,你重写setContentSize:
分配给定大小到以后你可以检查一个伊娃。
其他更容易的选择是使用一个真正UIScrollView
和检查是直接的contentSize
是你所期望的一个。 我会去为这个解决方案。
可悲的是,它看起来像你不得不为了完成这个扩展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;
}