У меня есть класс, основанный на NSUserDefaults, который я пытаюсь выполнить модульным тестированием, и я предоставляю NSUserDefaults как образец для моего тестового класса. При запуске теста выдается ошибка:
OCMockObject [NSUserDefaults]:
неожиданный метод вызван:
dictionaryForKey: @ "ответ"
Я пытаюсь смоделировать этот метод экземпляра класса 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
Есть предложения?