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

Langage PHP Discussion :

Début avec tests unitaires


Sujet :

Langage PHP

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut Début avec tests unitaires
    Bonjour à tous,

    après moultes hésitations je me décide enfin à mettre en place des tests unitaires , au moins pour mes classes les plus importantes. Mais quelques questions me viennent :

    Prenons ce test que je viens d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function testIsIp() {
            $ip     = '172.16.12.82';
            $ip2    = '172.256.32.44';
            $ip3    = 'abc.def.cc.qq';
            $ip4    = '123654789';
            $this->assertIsA(Util_String::isIp($ip),'bool');
            $this->assertTrue(Util_String::isIp($ip));
            $this->assertFalse(Util_String::isIp($ip2));
            $this->assertFalse(Util_String::isIp($ip3));
            $this->assertFalse(Util_String::isIp($ip4));
    }
    Est il correct ? Parce que finalement il y'a une infinité de tests possible pour vérifier que ma méthode isIp marche correctement. Dois je simplement vérifier qu'elle me renvoie true sur une ip correcte ou au contraire faire plus de test sur de mauvaise ip ?

    Dans le même esprit , comment puis je tester une méthode sensé me retourner une chaine aléatoire ? A part un assertIsA($chaine,'string') , je peux pas tester grand chose et dans ce cas précis j'ai l'impression de tester si l'eau sa mouille ...

    Dernière question mais pas des moindre , comment justifiez vous du temps passer à écrire des tests ? Parce que ca prend limite plus de temps que de construire la classe testé, et du coup pour mes supérieurs non technique tant qu'il ne vois pas un nouveau bouton sur leur écran , j'ai rien foutu ... Et entre "code plus robuste", "économie sur le long terme" ," temps de développement plus long" il ne retiennent évidement que le dernier.

    Merci pour vos réponses
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Question bête en voyant ton code : Pourquoi ne pas te reposer sur la fonction assert() fournie par PHP ? C'est pratique et ça te laisse la possibilité (certes mauvaise, faut pas, mais parfois on oublie des trucs) d'oublier de virer tes assertions lors de la mise en prod de ton code.

    Après pour les tests, tout dépend de ce que tu attends de ta fonction. Se limite-t'elle à matcher [1-255].[0-255].[0-255].[0-255] ou est elle capable d'identifier les réseaux privés, les IP multicast etc ? Le nombre de tests va dépendre de cela.

    Sinon pour le temps à y passer, tout dépend de la certitude que tu as concernant ce que va te renvoyer ta méthode. Faire des tests sur des algos complexes pour lesquels on a des résultats "types" qui devraient prouver l'exactitude des calculs, oui. Mais tester qu'une méthode bateau renvoie une chaîne aléatoire, ça vaut pas vraiment le coup.
    Pourfendeur de singletons en croisade

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    Question bête en voyant ton code : Pourquoi ne pas te reposer sur la fonction assert() fournie par PHP ? C'est pratique et ça te laisse la possibilité (certes mauvaise, faut pas, mais parfois on oublie des trucs) d'oublier de virer tes assertions lors de la mise en prod de ton code.
    J'ai pas d'assertion dans mon code de production, la méthode de test si dessus est dans une classe de test qui hérite de simpletest qui ne fait absolument pas partie de mon projet.


    Après pour les tests, tout dépend de ce que tu attends de ta fonction. Se limite-t'elle à matcher [1-255].[0-255].[0-255].[0-255] ou est elle capable d'identifier les réseaux privés, les IP multicast etc ? Le nombre de tests va dépendre de cela.
    Elle ne match effectivement que le pattern d'une ip, donc a priori mon nombre de test semble suffisant.

    Merci pour ta réponse
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Test unitaire avec DUnit
    Par stef_chand dans le forum Outils
    Réponses: 1
    Dernier message: 07/09/2007, 15h40
  2. Test unitaire avec C# et nunit
    Par jeromechezgdf dans le forum C#
    Réponses: 6
    Dernier message: 16/07/2007, 11h51
  3. Tests unitaires avec vbUnit sur des contrôles utilisateurs
    Par Patrick Mortas dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/09/2006, 18h06
  4. test unitaire avec python
    Par Abla23 dans le forum Zope
    Réponses: 4
    Dernier message: 30/06/2006, 13h04

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