単体テストしようとしている NSUserDefaults に依存するクラスがあり、NSUserDefaults をモックとしてテスト クラスに提供しています。テストを実行すると、次のエラーが表示されます。
OCMockObject[NSUserDefaults]: 予期しないメソッドが呼び出されました: dictionaryForKey:@"response"
NSUserDefaults クラスのこのインスタンス メソッドをモックしようとしています。
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
呼び出し形式を使用する:
[[[mockClass stub] andReturn:someDictionary] dictionaryForKey:@"aKey"]
DictionaryForKey メソッドを期待する必要があることをモックに伝えます。しかし、どういうわけか、これは記録されていないか、モックに「dictionaryForKey」呼び出しを期待することを知らなかったというエラーが表示されるため、期待するようにモックに伝えるのは正しくありません。
スタブの andReturn を呼び出す方法は、この質問と非常に似ているように見えますが、その質問では、ポスターは戻り値を取得していると述べています。私のテストケース:
-(void)testSomeWork
{
id userDefaultsMock = [OCMockObject mockForClass:[NSUserDefaults class]];
MyClass *myClass = [[MyClass alloc] initWith:userDefaultsMock];
NSDictionary *dictionary = [NSDictionary dictionary];
[[[userDefaultsMock stub] andReturn:dictionary] dictionaryForKey:@"response"];
BOOL result = [myClass doSomeWork];
STAssertTrue(result, @"not working right");
[myClass release];
[userDefaultsMock verify];
}
私のクラス:
@implementation MyClass
@synthesize userDefaults;
- (id)initWith:(NSUserDefaults *aValue)
{
if (self = [super init])
{
self.userDefaults = aValue;
}
return self;
}
- (BOOL)doSomeWork
{
NSDictionary *response = [userDefaults dictionaryForKey:@"response"];
if (response != nil)
{
// some stuff happens here
return YES;
}
return NO;
}
@end
助言がありますか?