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

Tests et Performance Java Discussion :

[Java - Junit] Des tests trop poussés, sont-ils mauvais ?


Sujet :

Tests et Performance Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 187
    Points : 65
    Points
    65
    Par défaut [Java - Junit] Des tests trop poussés, sont-ils mauvais ?
    Bonjour,

    Je me pose une question. Faire des tests trop avancés, j'entends par là, vérifier que tous les mocks sont bien appelés, un certain nombre de fois, avec des captor, etc. (exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    when(myMock.maFonction(captor)).thenReturn(...); 
    verify(myMock, times(4).maFonction(captor)); 
    assertEquals(captor.getValue(), moObjet);
    )

    Est-ce une mauvaise pratique ? Souvent, ce genre de tests ne sont qu'une "duplication" du code de production et quand ce dernier change, on est souvent obligés de changer le code de tests lui-même ce qui fait perdre de l'intérêt au process. En somme, est-ce qu'écrire des tests trop poussés n'est-il pas contreproductif?

    Je n'arrive pas vraiment à trouver de documentation sur ça, si vous avez une idée

  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,

    Vous ne trouverez pas de "documentation" à proprement parler, c'est de l'appréciation.

    // ! Avis personnel
    Je ne dirais pas que des tests trop poussés sont mauvais. Mais plutôt qu'il faut tester ce qui est utile.
    Comem vous le dites, vos tests sont de la duplication de la logique. Est-ce vraiment important de savoir que votre méthode va appeler 4 fois une autre méthode ? Je ne crois pas. Ce qui est iportant c'est de vérifier que la sortie soit correcte.

    Imaginons que `isBirthDay` doive retourner retourner true ou false ou lancer une exception si la date de naissance est invalide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      // Pseudo code
      boolean isBirthDay(Person p) {
         validator.validateOrThrow(p.getBirthDay());
         return today().equals(p.getBirthDay())
      }
    On à pas besoin de vérifier que `validator` ou `p.getBirthDay()` soient appelées. Ce que l'on veut tester c'est les entrées et sorties :

    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
     
      // Pseudo code
      must_return_true_when_birth_date_is_today() {
        Person p = new Person(dateOfToday())
        assertTrue(isBirthDay(p))
      }
     
      must_return_false_when_birth_date_is_not_today() {
        Person p = new Person(notToday())
        assertTrue(isBirthDay(p))
      }
     
      must_fail_when_birth_day_is_absent() {
        Person p = new Person("")
        assertFailWithException(isBirthDay(p))
      }
    Le problème avec votre exemple est que, si vous changez la façon de valider la date, il faudra changer vos tests. C'est pourtaht l'objectif inverse qui est visé, idéalement vous devriez pouvoir changer l'implémentation sans modifier les tests.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 187
    Points : 65
    Points
    65
    Par défaut
    Merci pour ta réponse. Je comprends ce que tu veux dire

Discussions similaires

  1. Exécuter des tests JUnit depuis Java
    Par batchi dans le forum Langage
    Réponses: 5
    Dernier message: 22/11/2013, 18h40
  2. Java: GeoTools/GeoToolKit/Openmap. Où en sont-ils?
    Par grunt2000 dans le forum SIG : Système d'information Géographique
    Réponses: 10
    Dernier message: 01/01/2011, 16h03
  3. Réponses: 16
    Dernier message: 04/09/2010, 01h17
  4. Pourquoi des titres de discussions sont-ils en gras et d'autres pas ?
    Par ybruant dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 16/11/2006, 15h22

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