J'ai une classe qui repose sur NSUserDefaults que j'essaie de tester unitaire et je fournis le NSUserDefaults comme un simulacre dans ma classe de test. Lors du test, je reçois l'erreur:OCMock sur une méthode avec argument et renvoie une valeur
OCMockObject[NSUserDefaults]: unexpected method invoked: dictionaryForKey:@"response"
Je suis en train de se moquer de cette méthode d'instance de la classe NSUserDefaults:
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
en utilisant le format d'appel:
[[[mockClass stub] andReturn:someDictionary] dictionaryForKey:@"aKey"]
pour dire au simulacre qu'il doit attendre la méthode dictionaryForKey. Mais d'une manière ou d'une autre, ceci n'est pas enregistré ou n'est pas la bonne chose à dire à la simulation d'attendre puisque l'erreur m'indique que Mock n'a jamais su s'attendre à l'appel 'dictionaryForKey'.
La façon dont j'appelle le stub etReturn semble très similaire to this question mais dans celui-là, l'affiche indique qu'ils obtiennent une valeur de retour. Mon cas de test:
-(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];
}
Ma classe:
@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
Toutes les suggestions?