2010-04-11 3 views
5

(Supposons que j'ai de bonnes raisons de ne pas enlever mes chèques NSAssert() dans mon code juste parce que je fais aussi des tests d'unité.)Comment puis-je tester NSAssert frappé cas en utilisant le cadre de tests unitaires de l'iPhone

Dans mon code de test unitaire, j'aime m'assurer qu'un NSAssert dans mon code frappe (affirme) quand je l'invoque. J'utilise donc la macro STAssertThrows() lors de l'appel du code qui fait l'assertion. Le problème est le suivant: Malgré la documentation indiquant que NSAssert lancerait une exception, le test de l'unité s'arrêtera avec un message d'erreur disant que l'application a planté.

Ceci est avec SDK 3.1.3 dans le simulateur.

Est-ce un bogue dans le framework ou y a-t-il quelque chose que je puisse faire pour améliorer ce travail, c'est-à-dire pour que NSAssert lève une exception que la macro de test unitaire peut attraper?

Répondre

1

J'ai tourné trop vite.

Transforme que le problème était ailleurs:

La classe qui contenait le NSAssert qui a tiré était pas une sous-classe de NSOject. C'était OK jusqu'à présent car il ne contenait que des méthodes de classe, pas de méthodes d'instance. Mais quand NSAssert frappe, il veut obtenir le nom de classe du code dans lequel il est assis, et cette méthode manquait. Faire de cette classe une sous-classe de NSObject l'a corrigé, et maintenant NSAssert jette effectivement une exception qui peut être testée par STAssertThrows. J'ai découvert cela en regardant les avertissements dans le journal des tests unitaires juste avant le crash: Il a averti qu'il ne pouvait pas trouver methodSignatureForSelector et doesNotRecognizeSelector. Après avoir ajouté ceux-ci et imprimer le sélecteur qu'ils recherchent (NSLog(@"sel:%s", aSelector);), j'ai trouvé qu'il cherchait la méthode "class". Puis j'ai réalisé ce qui se passait.

Ainsi, alors que cela était une question sans objet, je l'espère qu'au moins cette explication est d'aider quelqu'un, un jour, peut-être :)

Je ne me dérange pas d'avoir ce q supprimé, bien que, que ce soit.

Questions connexes