IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

ce test unitaire est-il correctement rédigé?


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Points : 34
    Points
    34
    Par défaut ce test unitaire est-il correctement rédigé?
    Bonjour,

    je viens a vous pr publier mon 1° test unitaire.
    J'aimerai juste que vs me disiez si le test est valable,
    Si je
    - Dois modifier qque chose.
    - Ajouter qque chose.
    - Tour reprendre parce que j'ai vraiment rien compris à l'utilité d'1 test unitaire.

    Je poste la classe et la classe de test
    C'est du niveau débutant
    1 classe tte simple: Autocars qui hérite de Vehicule.


    la classe Autocar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    package org.vehicule_01;
     
    /**
     * Javadoc de classe: Autocar<br>
     * Descript°:<br>
     * Herite de la classe Vehicule.<br>
     * Attributs hérités:<br>
     * - type<br>
     * - kilometrage<br>
     * - plaque<br>
     * Attributs spécifiques:<br>
     * - nombreDePlaces<br>
     * - chronotachygraphe<br>
     */
     
    public class Autocar extends Vehicule {
     
    	private static int count_autocar = 0;
    	private int id_autocar;
    	private int nombreDePlaces;
    	private boolean chronotachygraphe;	
     
    	public Autocar(Type p_type, int p_kilometrage, String p_plaque, int p_nombreDePlaces, boolean p_chronotachygraphe) {
     
    		super(p_type, p_kilometrage, p_plaque);
    		this.setNombreDePlaces(p_nombreDePlaces);
    		this.setChronotachygraphe(p_chronotachygraphe);
    		this.setId_autocar(setCount_autocar(getCount_autocar() + 1));
    	}
     
    	public int getId_autocar() {
    		return id_autocar;
    	}
     
    	public void setId_autocar(int id_autocar) {
    		this.id_autocar = id_autocar;
    	}
     
    	public int getCount_autocar() {
    		return count_autocar;
    	}
     
    	public int setCount_autocar(int count_autocar) {
    		Autocar.count_autocar = count_autocar;
    		return count_autocar;
    	}
     
    	public int getNombreDePlaces() {
    		return nombreDePlaces;
    	}
     
    	public void setNombreDePlaces(int nombreDePlaces) {
    		this.nombreDePlaces = nombreDePlaces;
    	}
     
    	public boolean isChronotachygraphe() {
    		return chronotachygraphe;
    	}
     
    	public void setChronotachygraphe(boolean chronotachygraphe) {
    		this.chronotachygraphe = chronotachygraphe;
    	}
     
    	@Override
    	public String toString() {
    		return("toString de autocar: " + "\n" + "id_vehicule: " + this.getId() + "\n" + " id_camion: " + this.getId_autocar() + "\n" + " type de véhicule: " + this.getType() + "\n" + " km: " + this.getKilometrage() + "\n" + " plaque: " + this.getPlaque() + "\n" + " nbre de places: " + this.getNombreDePlaces() + "\n" + " chronotachygraphe? " + this.isChronotachygraphe());
    	}
    }
    la classe TestAutocar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    package org.vehicule_01;
     
    /**
     * Javadoc de classe: TestAutocar<br>
     */
     
    import static org.junit.jupiter.api.Assertions.*;
     
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
     
     
    class TestAutocar {
    	Autocar acr01;
     
    	@BeforeEach
    	public void initAutocar() {
     
    		acr01 = new Autocar(Type.AUTOCAR, 157000, "ac-931-re", 60, true);
    	}
     
    	@Test
    	public void testIdAutocar() {
     
    		assertEquals(1, acr01.getId_autocar());
    	}
     
    	@Test
    	public void testNombreDePlaces() {
     
    		assertEquals(60, acr01.getNombreDePlaces());
    	}
     
    	@Test
    	public void testChronotachygraphe() {
     
    		assertEquals(true, acr01.isChronotachygraphe());
    	}
     
    }
    Question sur ce que j'ai produit:
    On voit bien que ds ma classe de test, j'ai rédigé 3 tests, 1 test pr chaque attribut de la classe Autocar.
    Je n'ai pas rédigé de test pr les attributs qui st hérités de la classe Voiture.
    La classe Voiture a 1 classe de test qui test ces (ou ses) 2 attributs.
    Est-ce nécessaire de ré éecrire des tests pour ces 2 attributs ds la classe de test Autocars?

    En vs remerciant
    grub.

  2. #2
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 326
    Points : 439
    Points
    439
    Par défaut
    Bonjour,

    L'objecif des tests est de vérifier le comportement du "sujet". Tester les accesseurs (setters et getters) est souvent inutile car testé indirectement via d'autres tests plus larges. Si vous voulez malgré tout les tester alors il faut aussi vérifier les "set". Je vérifierais alors personnellement les deux possibilités:
    1. Construire l'instance et vérifier (dans un test) que tous les attributs ont la valeur attendue.
    2. Pour chaque attribut modifiable, appeler le setter et vérifier que le getter retourne la bonne valeur.

    Mais, je précise, ce sont des tests assez inutiles tant que vous n'avez pas de logique derrière ces méthodes.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    Bonjour gervais.b (et tt le monde),

    J'ai un peu réfléchi à ce que vs avez ecrit et je prends note.
    Il reste qd meme 1 probleme:

    qd je regarde des exemples de tests unitaires, ce st des exemples simples, des operations de base (addit°, multiplicat0, concatenat° de String).
    Aucun des exemples que j'ai trouvé n'explique de methodes pr ecrire des tests sur des méthodes plus... conséquentes.
    C'est justement là ou je bloque: trouver comment faire des tests sur ce genre de méthodes (des méthodes un peu + complexes j'entends). Et dc à chaque x, je ne sais pas quoi tester.

    Après reflex°, je vois 1 moyen pr ecrire ces tests.

    Déclarer la classe a tester, ses attributs, ses getter setter, ses methodes (en fait les miennes persos que je redige).
    En ce qui concerne les methodes que je déclare:

    - commenter ttes les actions que doit réaliser 1 methode en débutant mon commentaire par 1 verbe
    (exemple: ouvrir 1 fichier, faire un substring de..., transformer le type d'1 donnée).
    A partir de ces verbes, je saurai quels tests mettre en place.

    Qu'en pensez vs?
    (Evidemment, je m'adresse à vs car vs avez répondu mais la question s'adresse a tout le monde)

    En vs remerciant,
    grub

  4. #4
    Membre averti
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mai 2020
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mai 2020
    Messages : 326
    Points : 439
    Points
    439
    Par défaut
    Et dc à chaque x, je ne sais pas quoi tester.
    L'idée c'est de tester le code qui est "risqué". Il y à peu de chance qu'un getter ne retourne pas la valeur d'un attribut. Par contre, il y à plus de chance qu'une division pose problème et encore plus que l'algorithme que bous avez implémenté pour résoudre le problème de votre client le soit. C'est donc la dessus qu'il fait écrire vos tests.
    Pensez à toutes les valeurs d'entrées possibles et tester le comportement. Si votre algorithme change, vos tests vont évidemment casser mais vous saurez pourquoi. Par contre si vous voulez modifier une autre fonctionnalité et que les tests de votre algorithme ne passent plus, vous saurez qu'il y à quelque chose à faire pour améliorer votre code.

    je vois 1 moyen pr ecrire ces tests
    La technique du Test Driven Development consiste à écrire vos tests avant d'écrire votre classe. Evidemment ça ne vas pas compiler, il faudra donc écrire/génèrer le code qui correspond. Ensuite vos teste vont compiler mais probablement pas passer. Vous allez alors implémenter vos méthodes. Puis rajouter des tests pour couvrir plus de cas et modifier l'implémentation. En théorie, ça fonctionne et ça ressemble un peu à ce que vous proposez. La différence est que vous écrivez vos tests au lieu de voter documentation.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/01/2022, 11h13
  2. Tests unitaire et c# : Chaîne de connexion est introuvable
    Par wperle dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 28/01/2019, 05h08
  3. [Free Pascal] Tests unitaires, est-ce un bogue ?
    Par Pierre le Grand dans le forum Free Pascal
    Réponses: 2
    Dernier message: 18/05/2018, 05h44
  4. Réponses: 3
    Dernier message: 09/05/2012, 08h30
  5. [XP] est-ce que "if" peut apparaitre dans un test unitaire?
    Par wl1979 dans le forum Méthodes Agiles
    Réponses: 3
    Dernier message: 14/08/2009, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo