私はOCMockを使用しており、テストの1つで次のようなことをしようとしています:
[[mockScrollView expect] setContentSize:[OCMArg any]];
問題は[OCMArg any]
、型を返すことです。正確な値がわからないため、id
any を使用したいと思います。CGSize
この引数を渡すにはどうすればよいですか?
私はOCMockを使用しており、テストの1つで次のようなことをしようとしています:
[[mockScrollView expect] setContentSize:[OCMArg any]];
問題は[OCMArg any]
、型を返すことです。正確な値がわからないため、id
any を使用したいと思います。CGSize
この引数を渡すにはどうすればよいですか?
私の知る限り、OCMock でそれを達成する方法はありません。
別の方法は、手作りのモックを作成することです。これは、後で検査できる ivar に特定のサイズを割り当てることUIScrollView
をオーバーライドする場所のサブクラスです。setContentSize:
他の簡単なオプションは、実数を使用してUIScrollView
直接確認するcontentSize
ことです。それはあなたが期待するものです。私はこの解決策に行きます。
残念ながら、これを実現するには OCMock を拡張する必要があるようです。あなたはこのパターンに従うことができます...
OCMArg.h
// Add this:
+ (CGSize)anyCGSize;
OCArg.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;
}