2010-07-17 4 views
0

Hallo,Tests unitaires pour les codes NSError

J'essaie de configurer des tests unitaires pour du code acceptant * NSError comme argument. S'il y a un problème de validation, l'objet n'est pas enregistré et la condition NSError est définie.

Ma méthode est:

- (BOOL)validateConsistency:(NSError **)error { 

    ... code omitted for brevity ... 

    if (errorCondition == YES) { 
     NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary]; 
     [errorDetail setValue:@"Validation failed " forKey:NSLocalizedDescriptionKey]; 
     *error = [NSError errorWithDomain:@"myDomain" code:100 userInfo:errorDetail]; 
     return nil; 
    } 
    ... 
} 

Une fois que je l'ai créé les conditions qui devraient générer cette erreur, comment puis-je STAssert/test dans mes tests unitaires?

Merci.

Répondre

3

Vous faites cela un peu mal à deux endroits:

  • Vous êtes de retour nul quand vous voulez dire retourner NO
  • Vous n'êtes pas vérifier avant error != nil lui assigner. Il est légal de passer nil comme pointeur NSError pour signifier "je m'en fous".

Une fois que vous fixer ceux-ci, vous pouvez tester le cas travailler avec

STAssertTrue(validateConsistency:nil, ...) 

Pour les conditions d'erreur, vous devriez juste le faire de cette façon:

NSError *error; 
STAssertFalse(validateConsistency:&error, ...); // Make sure we failed 
STAssertEqual([error code], 100, ...); // Make sure the code is right; we can assume the domain is right, or you could check it.