Quelle est la meilleure façon de tester le code Objective-C unitaire?

330

Quels cadres existent pour tester un code Objective-C? Je voudrais un cadre qui s'intègre bien avec Apple Xcode.

Kim
la source
À ma connaissance, certaines réponses ici sont dépassées. Apple dispose désormais de XCTest, qui vous aide à résoudre ce problème. Je pense que la plupart des réponses doivent être mises à jour.
Honey

Réponses:

317

Xcode inclut XCTest, qui est similaire à OCUnit , une infrastructure de tests unitaires Objective-C, et prend entièrement en charge l'exécution de tests unitaires basés sur XCTest dans le cadre du processus de construction de votre projet. La prise en charge des tests unitaires de Xcode est décrite dans la vue d'ensemble de Xcode: utilisation des tests unitaires .

Dans les 2 jours de Xcode, j'ai écrit une série de billets de blog sur la façon d'effectuer certaines tâches courantes avec les tests unitaires Xcode:

Malgré l'utilisation d'OCUnit plutôt que de XCTest, les concepts sont largement les mêmes.

Enfin, j'ai également écrit quelques articles sur la façon d'écrire des tests pour les interfaces utilisateur Cocoa; la façon dont Cocoa est structuré le rend relativement simple, car vous n'avez pas à faire tourner une boucle d'événement ou quelque chose comme ça dans la plupart des cas.

Cela permet de faire du développement piloté par les tests non seulement pour votre code au niveau du modèle, mais aussi pour votre code au niveau du contrôleur et même au niveau de la vue.

Chris Hanson
la source
5
Peter Hosey a également fait une bonne présentation sur les tests unitaires de cacao lors de la réunion de Cocoaheads à Lake Forest, en Californie, en décembre. En voici une vidéo: vimeo.com/2725498
Grant Limberg
1
Lorsque j'ai commencé les choses sur iOS il y a environ un an, j'ai constaté que OCUnit avait (pour moi) un sérieux inconvénient - je ne pouvais pas l'exécuter sur le simulateur ou l'appareil. Cela a peut-être changé depuis - je n'ai pas vérifié, mais j'utilise GHUnit simplement pour cette raison.
drekka
1
Existe-t-il des vidéos officielles des développeurs Apple à ce sujet? J'ai traversé la WWDC 2011 et 2010 mais je n'en ai pas trouvé ... étrange car les tests sont importants oui?
Robert
4
Le lien du guide de test d'unité Xcode a été déplacé vers le guide de test d'unité Xcode
Steven Green
5
Xcode 5 a maintenant XCTest inclut-il toujours OCUnit? Voulez-vous mettre à jour votre réponse avec des informations pour XCode 5.
BrightIntelDusk
50

Découvrez GHUnit par Gabriel Handford:

"Les objectifs de GHUnit sont:

Exécute des tests unitaires dans XCode, vous permettant d'utiliser pleinement le débogueur XCode. Une interface graphique simple pour vous aider à visualiser vos tests. Afficher les traces de pile. Être installable en tant que framework (pour les applications Cocoa) avec une configuration cible simple (ou non); ou facile à intégrer dans votre projet iPhone. "

Paul Robinson
la source
5
+1 pour GHUnit! Je suis nouveau dans le développement d'iPhone et je peux honnêtement dire que j'avais GHUnit opérationnel sans chichi (les instructions sont parfaites) par rapport au cauchemar absolu d'OCUnit et à la légère migraine de GTM. GHUnit gagne pour la convivialité et la facilité!
Tim Reddy
3
Notez que cette réponse et les commentaires qui l'accompagnent ont été écrits il y a quelque temps. Xcode prend désormais bien mieux en charge les tests basés sur OCUnit, ce qui facilite la configuration des tests et leur exécution dans le débogueur.
Kristopher Johnson
1
Ce projet est depuis déconseillé.
BigHeadCreations
18

J'ai commencé à utiliser la plate-forme de test Google Toolbox pour iPhone, et cela fonctionne très bien pour moi.

google-toolbox-for-mac

Ryan Townshend
la source
12

Notez que le projet Google Toolbox pour Mac (GTM) étend / augmente simplement le framework SenTestingKit d'Apple (qui est lui-même basé sur OCUnit). Comme on dit sur le site du projet:

GTM a plusieurs améliorations au SenTestingKit standard vous permettant de faire des tests unitaires d'interface utilisateur, des tests unitaires de liaison automatisés, le suivi des journaux et des tests unitaires sur l'iPhone, ainsi que des outils pour effectuer des tests statiques et dynamiques de votre code.

Notez le commentaire suivant sur les tests d'interface utilisateur:

GTM a un support étendu pour les tests unitaires d'interface utilisateur. Il prend en charge le test à la fois de l'imagerie et / ou de l'état interne de presque tous les objets UI Cocoa / UIKit standard, et vous permet d'étendre facilement cette prise en charge à vos propres objets UI.

Reportez-vous à leur page " Vérification du code et tests unitaires " pour obtenir des instructions sur son utilisation.

Clint Harris
la source
12

Je suis arrivé à la conclusion que GHUnit est le cadre de test le plus avancé pour Objective-C. J'ai fait un tour d' horizon des frameworks de test sur mon blog. Il est le plus flexible en termes de déploiement (iphone, simulateur ou mac os natif) et affirme ses capacités. Parce qu'il est basé sur GTM, il hérite de tous les avantages de GTM par rapport à SenTestingKit mais en ajoute beaucoup plus. Un autre avantage est qu'il est maintenu très activement.

J'ai fait des efforts pour intégrer OCMock dans GHUnit, cela fonctionne très bien!. Vous pouvez obtenir le code sur github .

Johannes Rudolph
la source
12

Je me rends compte que c'est une vieille question, mais si vous préférez les tests de style BDD (rspec, Jasmine, etc.) aux tests de style xUnit (Test :: Unit, JSUnit, JUnit, etc.), alors vous pouvez envisager de vérifier Cedar . Cedar apporte des tests de style BDD à Objective-C, maintenant que le langage prend en charge les fermetures.

Nous utilisons volontiers Cedar pour nos projets iOS chez Pivotal Labs , et nous travaillons activement à son amélioration. Tous les commentaires ou suggestions sont les bienvenus à [email protected]

Adam Milligan
la source
10

Je recommanderais également d'utiliser des outils de couverture pour voir quelle partie du code est couverte par des tests unitaires et lesquelles ne le sont pas. La couverture de base des codes de ligne et de branche peut être générée avec l' outil GCOV . Si vous voulez générer de bons rapports de couverture HTML, il y a LCOV et ZCOV qui font exactement cela.

Nikita Zhuk
la source
7

Sen: te (le créateur du framework de test inclus avec Xcode) explique comment utiliser OCUnit avec un projet iPhone: simple-iphone-ipad-unit-test .

nst
la source
4

J'utilise SimpleUnitTest fonctionne avec les bibliothèques iPhone et iPad.

http://cbess.blogspot.com/2010/05/simple-iphone-ipad-unit-test.html

Il est livré avec un modèle Xcode de test unitaire pour ajouter facilement une classe de test unitaire. Wraps GTM.

Vous pouvez littéralement le déposer dans un projet actif et commencer à ajouter des tests unitaires dans les 3 minutes (ou moins).

C. Bess
la source
Euh .. est-il censé échouer dès que vous l'exécutez?
quantumpotato
3

Specta est un framework TDD (Test Driven Development) / BDD (Behavior Driven Development) moderne qui fonctionne au-dessus de XCTest. Il prend en charge les tests unitaires pour les projets iOS et Mac OS X.

dbainbridge
la source
0

J'espère que vous pourrez utiliser «SenTestKit», à partir duquel vous pourrez tester chaque méthode.

Karthik
la source