Les meilleures pratiques sur la façon d'inclure des tests unitaires dans une bibliothèque

StackOverflow https://stackoverflow.com/questions/1791974

Question

Je travaille sur une bibliothèque de code général pour ActionScript 3.0 appelé as3lib qui comprend plusieurs extensions à l'API de base et quelques fonctions utiles. J'ai écrit plusieurs tests unitaires (en utilisant FlexUnit) pour vous assurer que tout fonctionne correctement.

Quelle est la meilleure façon d'organiser ces tests dans la bibliothèque? À l'heure actuelle, j'ai tout mon code dans src/ et mes tests en test/ mais je l'ai mis en place un projet Flex secondaire pour exécuter le tests unitaires. Je suis également d'ajouter manuellement et en supprimant les fichiers de test de la bibliothèque quand je veux exécuter les tests.

Ce que je fais ne semble pas juste. Y at-il une meilleure façon? De préférence, celui où la bibliothèque compilée ne comprend pas les fichiers de test, mais je ne pas besoin de deux projets distincts pour les tester.

Était-ce utile?

La solution

La façon dont nous avons fait ces choses à mon entreprise est que nous incluons en fait à la fois dans le répertoire source, puis nous avons deux fichiers MXML d'applications que nous utilisons. La première est la suite de tests, qui comprend tous les liens appropriés aux classes de test d'unité, l'autre est l'application principale. Nous avons également deux structures de paquet à l'intérieur du dossier src: une structure de package com .., et un autre tests.com ... Assurez-vous que ALL code source pour les tests unitaires sont TOUJOURS dans le paquet tests - cette façon, vous pouvez utiliser un seul ignorer SVN, et vous pouvez également vous assurer que vos tests ne créent pas de relations dépendantes et codées en dur avec d'autres projets

.

Il y a deux façons que nous utilisons pour faire en sorte que les fichiers sources de test.com ne sont pas inclus. Le système automatisé de construction référence uniquement l'application principale, et depuis que seules les importations de com., Mxmlc.exe ne comprendra que les fichiers de l'application principale. Lors de la construction sur place, à l'intérieur de l'éclipse, vous pouvez contrôler la façon dont les choses à construire en cliquant sur la petite flèche à côté de débogage et faites défiler jusqu'à « Organiser les favoris. » Lorsque vous cliquez sur « Ajouter », vous devriez être en mesure de sélectionner tous les fichiers au niveau racine .mxml qui font référence à la classe d'application. Assurez-vous d'ajouter l'application de base et le nouveau fichier d'application de test unitaire. Lorsque vous cliquez sur puis « OK », la flèche vous permet maintenant de déboguer soit comme application principale, ou votre cadre de test unitaire.

En aparté, nous utilisons également FlexUnit comme cadre de tests. Je l'aime.

Autres conseils

Je vais aller contre le courant ici et suggère la mise en place d'un projet tout à fait différent pour vos tests. Je crois que généralement il ne compte pas vraiment où vous mettez les essais, tant qu'il est cohérent et peu maniable. Cependant, pour moi, il y a trois raisons impérieuses pour avoir un projet distinct pour les tests:

  1. La séparation des préoccupations. Tout d'abord, votre bibliothèque a un but, les tests ont une autre. Alors que les besoins des tests de la bibliothèque à la fonction, la bibliothèque n'a pas de réelle utilisation pour les tests. Remarque que je ne dis pas que les tests sont inutiles, loin de là. Les tests sont là pour vérifier la santé de la bibliothèque, mais dans un environnement de production, les essais servent à rien.

  2. Moins ballonnement, des fichiers plus petits. Les tests ne sont pas toujours trivial. Mais même s'ils étaient tous, ils avaient encore utiliser l'espace disque. Étant donné que les tests ne sont pas utilisés dans un environnement de production de toute façon, cela est inutile. En outre, la séparation des tests dans un nouveau projet rend la structure du fichier un beaucoup plus propre.

  3. environnements de CI sont généralement plus propres à mettre en place lorsque les tests ne sont pas autour.

Bien qu'il soit certainement peut-être au moins résoudre le second problème avec les directives du compilateur, il est le travail inutile quand il est beaucoup plus facile de séparer les deux. Test d'une bibliothèque ou une application qui peut vous obliger à utiliser le même espace de noms (les classes internes qui que ce soit?) Est pas un problème, puisque votre projet de tests peut refléter les espaces de noms. De toute évidence, ce qui rend nécessaire de ne pas avoir des collisions de noms dans les espaces de noms, mais c'est trivial.

En termes de soutien Flash Builder, il est bon de séparer les choses en deux projets. Tout ce que vous devez faire pour créer un nouveau test est un clic droit quelle que soit la classe que vous whish pour tester, demander de créer un nouveau test et assurez-vous de choisir votre projet au lieu des tests du courant dans la boîte de dialogue qui apparaît. C'est vraiment la principale raison pour laquelle moi et mes membres de l'équipe ont du mal à justifier des tests d'écriture quand nous sommes arrivés en TDD, trop au-dessus juste pour commencer. En l'état actuel de l'IDE, il est ridiculement simple et utile.

Comme toute technique cependant, il y a des mises en garde. D'une part, il est pas évident que les tests sont dans un autre projet à moins qu'il soit documenté. Avoir les tests dans le même projet trie efficacement ce problème. D'autre part, cela est facilement résolu en configurant maven ou d'autres outils de gestion de la dépendance que vous pourriez avoir dans votre environnement. Un autre problème est que si vous avez une structure de package dans vos tests projet qui reflète celui de la bibliothèque ou de l'application, il y a certains frais généraux d'entretien d'avoir ces structures synchronisées. Sans un énorme problème et assez facilement résolus en utilisant les scripts, il est toujours utile de mentionner.

Quoi qu'il en soit, voilà comment je le fais.

scroll top