Nous ne sommes jamais sûr de la validité complète d'un programme, seulement on peut utiliser des programmes de tests pour vérifier de la qualité de notre programme / logiciel.
JUnit permet d'avoir plus d'assurance de la qualité de son logiciel.

Au niveau manuel, c'est très fastidieux, pas très drôle, etc. Si on se trompe ou qu'une modification est à effectuer, il faut recommencer la série de test, manuellement c'est pas top.

Avec JUnit on a un moteur de test qui permet d'effectuer un jeu de test, et ceci autant de fois qu'il nous est nécéssaire / utile.

== JUnit ==

Est une API del'ordre graphique, disponible sur [[http://w3.junit.org => domaine public (gratuit)]]

Façons de fonctionner : 
  * Graphique
  * Console / texte

== Moteurs de tests ==

Faire un test revient généralement à faire une comparaisons entre le résultat __voulu__ et le résultat __réel__.

Dans JUnit, si le test échoue, il donne l'erreur et la ligne d'erreur.

=== Moteur de test en mode texte ===

Cf. Polycopié

=== Moteur de test en mode graphique ===

Cf. Polycopié

== Assertions == 

Les assertions permettent de tester des valeurs par rapport à une comparaison, qu'elles soient égales, nulles, identiques, etc., mais aussi faire échouer le test.

== Cas de tests ==

//setup// et //tearDown// sont automatiquement appelés par les moteurs de test. Il faut donc redéfinir les méthodes pour mettre les objets dans les bons état en fonction de ce que nous voulons obtenir.

Il est possible de créer des tests plus élaborés que des tests unitaires "merdiques". Exemple : Cf. Polycopié pour le test sur dépliage de pile.

== écriture d'une suite de tests ==

Une arborescence précise des tests existe. Cf. schéma polycopié.

Un test peut donc contenir une suite de test. Ce qui est très intéressant.

Si vous n'avez pas crée une suite de Test, JUnit prend l'ensemble des méthodes ayant le mot TEST, et va construire une suite de tests.

== Conseils ==

Développé par les partisans d'**eXtreme programming**, donc pas obligé d'attendre à avoir tout fini pour commencer pour tester.

Il peut être intéressant d'ajouter, pour chaque découverte de bug, un test supplémentaire pour vérifier à chaque ajout de fonctionnalités, que le bug ne se réhitère pas.

Il peut être bon de changer de personne pour la batterie de tests, car il n'a pas la même notion des choses que vous, ce qui apporte une plus - value certaine.

== JUnit version 4 ==

Cette version apporte des ajouts concernant les //annotations// qui sont apparues dans les programmes Java avec JRE 1.5.0.

Les principes sont les mêmes sauf qu'on va utiliser des noms différents, et des annotations avec un arobase (@).

Les tests de JUnit ne vont pas regarder le nom de la méthode, mais l'annotation.

On peut passer des paramètres aux annotations, c'est la gestion des exceptions.

Si on a plusieurs BEFORE, ils seront exécutés dans l'ordre où ils apparaissent dans la classe.



== Conclusion ==

Investissement de départ, mais pour une application de longue haleine, c'est un très bon investissement sur le long terme.

Il est très intéressant de l'utiliser AVANT de commencer à programmer.


== Autres ==

En Java, il existe une fonction nommée TRIM qui permet de supprimer les espaces avant et après une chaîne : 
<code java>
	Class ctl
	String trim ( String s)
</code>

Code de test: 
<code java>
public class TestTrim
{
	@Test
	public void chaineVide()
	{
		assertTrue( Ctl.trim("").length() == 0);
	}

	@Test
	public void chaineEspaces()
	{
		assertEquals( Ctl.trim("     "),"");
	}

	@Test
	public void devant()
	{
		assertEquals(Ctl.trim("   abc"), "abc");
	}

	@Test
	public void milieu()
	{
		assertEquals(Ctl.trim("abc   ok"), "abc   ok");
	}
}
</code>


