使い方
mock objectの生成
クラスオブジェクトから生成
空(メソッドがない)のmockオブジェクト生成
mockは定義していないメソッドを呼ぶと例外が発生する
id mock = [OCMockObject makeForClass:[NSString class]];
定義していないメソッドを読んでも例外が発生しない
id mock = [OCMockObject niceMockForClass:[NSString class]];
インスタンスオブジェクトから生成
id aMock = [OCMockObject partialMockForObject:[NSString stringWithString:@"foo"]];
プロトコルモック
id mock = [OCMockObject mockForProtocol:@protocol(NSLocking)];
observerモック
id mock = [OCMockObject observerMock]
stubの作成
id mock = [OCMockObject mockForClass:[NSString class]];
[[mock stub] lowercaseString];
呼ばれたことを検証する
id mock = [OCMockObject mockForClass:[NSString class]];
[[mock expect] lowercaseString];
// [mock lowercaseString];
[mock verify]; // exception throw
呼ばれた順庵も検証
[mock setExpectationOrderMatters:YES];
[[mock expect] lowercaseString];
[[mock expect] uppercaseString];
戻り値を指定
任意のオブジェクトを指定
[[[mock stub] andRetugn:@"ret"] lowercaseString];
プリミティブ型
OCMOCK_VALUE(1)とやるとエラーになる
int expectedValue = 1;
[[[mock stub] andRetugnValue:OCMOCK_VALUE(expectedValue)] lenght];
引数の指定
固定オブジェクト
[[mock stub] hasSuffix:@"foo"];
任意のオブジェクト
[[mock stub] hasSuffix:[OCMArg any]];
[[mock stub] hasSuffix:OCMOCK_ANY];
可変長引数
[[mock stub] hasSuffix:@"foo"];
参照の指定
[[mock expect] completePathIntoString:[OCMArg setTo:expectedName] caseSensitive:YES
matchesIntoArray:[OCMArg setTo:expectedArray] filterTypes:OCMOCK_ANY];
Nilチェック
[[mock expect] someMethod:[OCMArg isNil]]
[[mock expect] someMethod:[OCMArg isNotNil]]
オブジェクトチェック
NSString* aValue = @"bar";
[[mock expect] someMethod:[OCMArg isNotEqual:aValue]];
// selector
[[mock expect] someMethod:[OCMArg checkWithSelector:aSelector onObject:anObject]];
// block
[[mock stub] hasSuffix:[OCMArg checkWithBlock:^(id value) { return [value isEqualToString:@"foo"]; }]];
処理内容の指定
例外
NSException *exception = [NSException exceptionWithName:@"TestException" reason:@"test" userInfo:nil];
[[[mock expect] andThrow:exception] lowercaseString];
niceMockForClassにおける例外処理登録
id mock = [OCMockObject niceMockForClass:[NSString class]];
[[mock reject] uppercaseString];
通知
NSNotification *notification = [NSNotification notificationWithName:TestNotification object:self];
[[[mock stub] andPost:notification] lowercaseString];
特定の処理を呼ぶ
// selectorを使うやり方
//
// 自分のクラスに定義済み
// - (NSString *)valueForString:(NSString *)aString andMask:(NSStringCompareOptions)mask
///
[[[mock stub] andCall:@selector(valueForString:andMask:) onObject:self] commonPrefixWithString:@"FOO" options:NSCaseInsensitiveSearch];
// ブロックを使うやり方
void (^theBlock)(NSInvocation *) = ^(NSInvocation *invocation) {
NSString *value;
[invocation getArgument:&value atIndex:2];
value = [NSString stringWithFormat:@"MOCK %@", value];
[invocation setReturnValue:&value];
};
[[[mock stub] andDo:theBlock] stringByAppendingString:[OCMArg any]];
オリジナルの処理を実行
ただしpartialMockForObjectで生成した場合のみ
[[[mock expect] andForwardToRealObject] method2];
できないこと
クラスメソッドの追加
0 件のコメント:
コメントを投稿