[Test] les meilleures pratiques de JUnit


Qu'est-ce que JUnit?
Cherami
JUnit est un open source du framework de test Java utilisé pour écrire et exécuter des tests reproductibles.Il s'agit d'un système de tests unitaires xUnit cadre d'une instance (pour le langage Java).Il comprend les fonctionnalités suivantes:
1, pour tester les résultats attendus de l'assertion (affirmation)
2, pour le partage des outils de test commun des données d'essai
3, pour la commodité de l'organisation et le fonctionnement des tests suite de tests
4, graphiques et texte lanceur de test
JUnit a été initialement développé par Erich Gamma (GoF One) et Kent Beck (xp et l'un des pionniers refactoriser) préparés.
Il faut remarquer que junit est généralement utilisé pour les tests unitaires, et ont donc besoin de comprendre la structure interne du code testé (soi-disant tests boîte blanche), l'autre est la programmation junit xp et refactorisation (refactoring) a été fortement recommandédes outils, tests unitaires automatiques parce que les circonstances peuvent accroître considérablement l'efficacité du développement, mais est en fait l'écriture de code de test prend beaucoup de temps et d'efforts, alors les avantages de l'utilisation de ce genre de choses où il est?Je crois que c'est ceci:
1, pour la programmation XP, appelle à l'écriture de tests avant d'écrire du code, qui peut vous forcer à réfléchir correctement avant d'écrire le code dans le code (méthodes) de la fonction et la logique, ou d'écrire le code est instable, alors vous avez besoin tout en maintenant lacode de test et le code réel, cette charge de travail augmentera de façon significative.Par conséquent, dans la programmation XP, le processus de base est la suivante: l'idée - «écrire du code d'essai -" pour écrire du code - "test, et les tests d'écriture et l'écriture de code sont progressives, et écrire un petit test ce code dans la préparation de l'avenirSi des problèmes sont découverts plusieurs blocs peuvent être attribués à ce problème, de réduire la difficulté de corriger l'erreur de retour
2, pour la reconstruction, ses avantages et de programmation XP est similaire, parce que la reconstruction est également nécessaire pour changer un petit test, moins de temps en raison de renvoyer des erreurs.
3, pour les non-dessus de deux situations, lorsque nous développons l'utilisation appropriée d'écriture de test JUnit est nécessaire, parce que le critère général nous avons aussi besoin d'écrire du code, vous ne pouvez pas utiliser le junit original, si vous utilisez junit, mais aussi contreInterface (méthodes) pour préparer le code de test permettra de réduire les travaux d'entretien futurs, tels que les changements dans la méthode après (ce qui équivaut à des travaux de reconstruction.)l'affirmation de Junit, car il est une autre fonction, si les résultats du test ne passe pas le test nous dira qui ne passent pas, pourquoi, et si la pratique antérieure générale est d'écrire du code de test est de comparer à leur sortie, et ensuite de déterminer par eux-mêmes les résultats de l'utilisation de la bonneutilisant avantage junit est que ce résultat est correct de juger de mener à bien, il suffit de regarder le droit de nous dire si les résultats peuvent, en général, permettra d'améliorer grandement l'efficacité.
JUnit Mise en route
Afin Cherami
Installation JUnit
L'installation est très simple, d'abord l'adresse ci-dessous pour télécharger un fichier zip de nouvelles:
http://download.sourceforge.net/junit/
Après téléchargé, extrait de votre répertoire favori, l'hypothèse est JUNIT_HOME, puis JUNIT_HOME junit.jar dans le cadre du paquet ajouté à votre système de variable d'environnement CLASSPATH, de l'environnement IDE, la nécessité d'une utilisation accrue du projet junitlib, ses différents paramètres IDE ont des réglages différents, où pas grand chose à dire.
Comment utiliser JUnit pour écrire des tests?
L'exemple le plus simple:
1, créez une sous-classe de TestCase:
junitfaq colis;
import java.util .*;
junit.framework importation .*;
public class SimpleTest s'étend TestCase {
SimpleTest public (String nom) {
super (nom);
}
2, écrire une méthode d'essai valoir les résultats attendus:
testEmptyCollection public void () {
Collection collection = new ArrayList ();
assertTrue (collection.isEmpty ());
}
Note: l'approche de test JUnit est recommandé que le début de la méthode à tester, de sorte que ces méthodes peuvent être automatiquement détecté par les tests.
3, écrire une suite () méthode, qui utilise la réflexion pour créer dynamiquement une méthode qui contient tous la suite de tests testXxxx:
public static suite Test () {
nouvelle déclaration TestSuite (SimpleTest.class);
}
4, écrire une méthode main () pour exécuter le périphérique en mode texte pour faciliter le fonctionnement de l'essai:
public static void main (String args []) {
junit.textui.TestRunner.run (suite ());
}
}
5, exécutez le test:
Exécuter en mode texte:
junitfaq.SimpleTest java
Par les résultats du test sont:
.
Durée: 0
OK (1 tests)
Selon Time, le test sur le nombre de petits points, et si des essais montre OK.Sinon, le petit point derrière le F marquée, indique que le test a échoué.
Chacun des résultats doit être OK, afin d'expliquer le test est réussi, en cas d'échec de l'information suivra immédiatement la demande de révision.
rapport de test JUnit en cas d'échec, il fera la distinction entre les défaillances (pannes) et des erreurs (erreurs).L'échec est le code dans votre méthode échoue en raison d'affirmer, et l'erreur est provoqué par le code anormales, telles que ArrayIndexOutOfBoundsException.
Graphiquement exécuter:
junitfaq.SimpleTest junit.swingui.TestRunner java
Les résultats du test par le biais de l'interface graphique de la barre verte en partie.
Il s'agit de l'échantillon test le plus simple, le test proprement dit, nous testons la fonction d'une classe est souvent nécessaire d'effectuer certaines opérations courantes, après l'achèvement de la destruction des ressources nécessaires (telles que les connexions réseau, les connexions de base de données, fermer les fichiers ouvertsetc), la classe TestCase nous fournit une méthode d'installation et tearDown méthodes, la méthode d'installation pour tester votre contenu dans la préparation de la méthode sous-classe TestCase avant chaque testXxxx se déroulera, et les méthodes de démontage du contenu après la fin de chaque méthode sera exécutée testXxxx.Le code d'initialisation partagée uniquement, mais élimine également le potentiel de chaque interaction entre le code de test.
les meilleures pratiques de JUnit
Martin Fowler a déclaré: «Lorsque vous essayez d'imprimer des informations de débogage ou une expression, écrire du code d'essai pour remplacer les méthodes traditionnelles." Au début, vous verrez que vous voulez toujours de créer quelque Mobilier nouvelle, et le testprogrammation vous semble ralentir.Peu après, cependant, vous constaterez que vous répéter la même Mobilier, et le nouveau test est habituellement ne concerne que l'ajout d'une nouvelle méthode d'essai.
Vous pouvez écrire beaucoup de code de test, mais vous trouverez bientôt que vous envisagez une petite partie seulement de cette épreuve est vraiment utile.Vous avez besoin de test est le test qui échoue, que vous pensez que ne manquera pas de ces tests, ou pensez-vous qu'ils devraient échouer au test de succès.
Comme nous l'avons mentionné plus tôt tests est un processus sans interruption.Une fois que vous avez un test, vous devez vous assurer que leur travail a été de tester votre travail en ajoutant un nouveau code.Ne pas faire fonctionner tous les jours ou le jour du dernier test, vous devez exécuter ce code de test.Cet investissement est très faible, mais il peut veiller à ce que vous obtenez le code fiable.Réduisez votre taux de retravailler, vous aurez plus de temps à écrire du code qui fonctionne.
Ne croyez pas que la pression, ne pas écrire de code de test.Au lieu d'écrire du code de test va progressivement réduire votre stress, devraient être testées par l'écriture de code, vous avez le comportement exact de la compréhension de la classe.Vous serez plus rapide à écrire du code pour travailler efficacement.
Voici quelques compétences spécifiques dans l'écriture de code de test ou de bonnes pratiques:
1. Ne pas utiliser le constructeur initialise TestCase Mobilier, mais plutôt utiliser la configuration () et tearDown () méthode.
2. Ne comptez pas sur ou supposer que l'ordre d'essais, parce que la méthode de test JUnit l'aide du Vector sauvé.Ainsi, différentes plates-formes seront dans un ordre différent, retirez les méthodes d'essai Vector.
3. Afin d'éviter les effets secondaires de la préparation d'un TestCase.Par exemple: Si les tests ultérieurs dépend des données de transaction spécifiques, ne pas soumettre les données de transaction.Est-ce tout simplement rouler sur elle.
4. Lors de l'héritage d'une classe de test, n'oubliez pas d'appeler la superclasse setUp () et tearDown () méthode.
5. Mettra à l'essai le code et le code de travailler ensemble, tout en compiler et mettre à jour.(Utilisation de l'Ant junit avait à soutenir la tâche.)
6. Classes d'essai et méthodes d'essai doit avoir un schéma de nommage cohérente.Si le nom de la classe ouvrière à l'essai pour former le nom de la classe de test.
7. Afin de s'assurer que le test est indépendant du temps, ne comptez pas sur des données périmées utilisés pour les essais.Abouti à l'entretien ultérieur du processus est difficile à reproduire le test.
8. Si vous écrivez des logiciels pour le marché international, la préparation de l'essai à prendre en compte les facteurs internationaux.Native Locale non seulement pour les tests.
9. Dans la mesure du possible de fournir l'utilisation de JUnit d'affirmer ou d'échec et la méthode de gestion des exceptions peut rendre le code plus concis.
10. Le critère à être aussi faible que possible, la mise en œuvre de la vitesse.
Combinaison de JUnit et la fourmi
Cherami Liens
ant fournit deux cibles: junit et junitreport
Exécuter tous les cas de test, et générer des rapports au format HTML
Pour effectuer les opérations suivantes:
1. ANT_HOMElib répertoire sur le junit.jar
2. Modifier build.xml, ajouter ce qui suit:
name="report" property value="report" target / name="junitreport" depends="clean, compile" printsummary junit = "on" la fourche = "true "haltonfailure =" false "failureproperty =" tests.failed "showoutput =" true " classpath refid="myclasspath"/ formatter type="xml"/ batchtest todir = "$ {report}" fileset dir="${build}" include name="**/*Test.*"/ /fileset / batchtest / junit junitreport todir="${report}" dir="${report}" fileset inclure le nom = "TEST-*. xml "/ / fileset report format="frames" todir="${report}"/ / junitreport échouer si =" tests.failed "; --------------------------------------------------------- Un ou plusieurs tests ont échoué, consultez le rapport pour plus de détails ... --------------------------------------------------------- / échec / target
Exécutez cet objectif, la fourmi se déroulera chaque TestCase
Directory dans le rapport, il ya beaucoup de TEST *. xml et quelques pages
Ouvrez le répertoire index.html rapport, vous pouvez voir un des rapports très intuitive essai un coup d'œil.