Exercices html et css Cette page présente les exercices de la formation tests unitaires.
Une correction est systématiquement proposée.

Exercice 1 : Présentation

Le but de ces exercices est de réaliser le test d'une application complète dont le but est de présenter les résultats des match de pro A

L'application permet de :

  • Récupérer les résultats et les statistiques des derniers matchs joués via le web service de la LNB
  • Calculer un certain nombre de statistiques sur les joueurs et les match
  • Afficher les statistiques des match dans une ihm développée en Swing

Les sources de l'application dont disponnibles sur gitlab :

	git clone git@gitlab.com:julien-gauchet/tests-unitaires-exercices.git

Vous pouvez également les télécharger ici : Sources tests unitaires

Tests de la couche services

Un service fr.julien.formation.basket.services.CalculStatistiquesService permet de calculer :

  • Le nombre de points d'un joueur au cours d'un match
  • L'évaluation d'un joueur : points + rebonds + passes décisives + interceptions + contres + tirs réussis - tirs ratés - ballons perdus

Le but de l'exercice et de :

  1. Déterminer quelles méthodes et quelles classes doivent être testées pour le service et les classes métier utilisées
  2. Réaliser les tests et corriger les erreurs éventuelles détectées
  3. Se poser des questions sur la qualité du jeu de tests
Test des daos

Le test de le couche DAO est plus complexe, il demande de faire appel à une base de données. Nous pouvons pour cela utiliser un schéma dédié de notre base, mais dans le cas présent, nous allons travailler sur une base h2

Le but de cet exercice est d'utiliser une base de données h2 pour tester les daos :

  • fr.julien.formation.basket.dao.BilansDao qui permet d'accéder à la table contenant les bilans des match
  • fr.julien.formation.basket.dao.MatchDao qui permet d'accéder à la table contenant les match
Diagramme de la base de données
Création de mocks

Nous allons maintenant tester la classe fr.julien.formation.basket.services.MiseAJourMatchs qui fait appel à un web service non accessible hors production. Utilisez des mock pour réaliser le test de cette classe. Un refactoring est nécéssaire

Le web service fournit un résultat xml scructuré de la facon suivante :

<matchs journee="??">
	nomJoueur;prenomJoueur;nomEquipe;lancerFrancs;lancerFrancsReussis;deuxPoints;deuxPointsReussis;troisPoints;troisPointsReussis;rebonds;fautes;passesDecisives;ballonsPerdus;interceptions;contres
	nomJoueur;prenomJoueur;nomEquipe;lancerFrancs;lancerFrancsReussis;deuxPoints;deuxPointsReussis;troisPoints;troisPointsReussis;rebonds;fautes;passesDecisives;ballonsPerdus;interceptions;contres
</matchs>
Que faire de l'ihm ?

Notre application contient une partie ihm : le test de l'ihm ne se fait pas grâce à des tests unitaires. Cependant, une partie du code de l'ihm peut être testée : a vous de l'identifier et de faire ce qu'il faut pour que cette partie soit désormais testable

Bilan de l'exercice 1

Nous avons testé notre application de manière méticuleuse et sans trop en faire, malgré tout, le refactoring et l'adaptation de l'application à nos test a été une part importante du travail de test, sans doute l'étape la plus longue et complexe

Les sources de la solution sont disponnibles ici : projet basket : solution, le pom utilisé est le suivant : projet basket : solution

La couverture de test est de 55,7% ce qui est un bon score mais encore loin des 80% recommandés. La question la plus importante à se poser n'est pas "quel est ma couverture de test ?" mais "est-ce que je couvre une partie suffisante des fonctionnalités de l'application ?" et dans notre cas, nous ne pouvons pas réelement faire mieux sans tester des choses triviales ou sans dégrader la simplicité de nos tests

Couverture de test
Exercice 2 : Présentation

Le but de ces exercices est de réaliser le test d'une application Spring et de réaliser des modifications afin de se rendre compte de la pertinence des cas de tests mis en place.

L'application utilise des relevés géologiques faits dans le jura afin de comparer les concentrations en nickel et en cobalt du sol et d'afficher une régression linéaire sur ces deux variables

Les sources de l'application dont disponnibles sur gitlab :

	git clone git@gitlab.com:julien-gauchet/tests-unitaires-exercices.git

Vous pouvez également les télécharger ici : Sources tests unitaires

Configuration des tests avec spring

Dans un premier temps, nous allons configurer le projet pour utiliser Spring test et une base H2

  • Créer une classe de config pemettant de récupérer un transactionManager pour les tests
  • Pour structurer les tests, créer deux classes abstraites contenant la config pour les tests
    • La première pour les tests simples (sans appel à la base de données)
    • La seconde initialise une base de données
Création d'un test

Je ne propose pas de correction de cette partie, l'idée sera de construire votre propre jeu de test

Testez le plus efficacement possible les classes de ce projet

Modification du modèle de données

Dorénavant, nous allons utiliser le fichier init_db2.sql pour initialiser la base de données

Pour savoir si vos tests unitaires sont corrects, le but du jeu sera de corriger les tests et le programme et de voir si après cette correction, le programme se lance ou si le jeu de tests était insuffisant pour procéder au lancement

Bilan de l'exercice 2

Il n'y a pas de solution miracle qui permette de tester entièrement et sans risque de régression les applications, il est cependant possible de réaliser un travail de test intéressant et utile.

Dans notre cas, la couverture de test est vraiment faible (22,7%), et pourtant, ces tests sont tout à fait utiles. Il ne faut pas à tout prix chercher la couverture de test, mais chercher leur utilité.

Couverture de test