2011-06-21 2 views
3

Je viens de commencer à écrire des tests pour mon application iOS, j'utilise Xcode4 et OCUnit. J'écris maintenant un test pour un morceau de code qui devrait lancer une exception si une variable statique a déjà été attribué à, comme ceci:Le test échoue en raison de l'échec de l'assertion NSAssert

NSAssert(controllerInstance == nil, @"another controller is already in use!"); 

Dans mon test, j'utiliser STAssertThrows pour vérifier que le code ci-dessus jette une erreur si l'instance existe déjà. Le problème est que ce test échoue avec:

*** Assertion failure in (reference to row with NSAssert) 

Donc, le test échoue, même si le comportement est exactement celui que je veux. Mais ne devrait pas STAssertThrows attraper cela? Peut-être que je ne devrais pas utiliser NSAssert avec STAssertThrows de cette façon?

Répondre

3

Je pense que le assertion handler imprime ce message avant en levant l'exception. Si ce n'est pas le cas, STAssertThrows() ignore probablement les échecs d'assertion.

Dans tous les cas, pourquoi testez-vous que NSAssert fonctionne? Ne faites-vous pas confiance au framework Cocoa?

Modifier

juste remarqué la deuxième partie de votre question. La réponse est non, vous ne devriez pas utiliser STAssertThrows et NSAssert ensemble de cette manière. NSAssert() est là pour détecter les cas d'erreur de programmation où une supposition du programmeur est fausse. Par définition, un morceau de code qui affirme a échoué son test.

+1

Très bien, point pris. Ensuite, je n'utiliserai pas NSAssert dans ce cas car je préfèrerais rassembler les hypothèses sur la façon dont le code devrait fonctionner dans mes cas de test. – Cactuar

Questions connexes