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 :

tester les méthodes d'une classe


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut tester les méthodes d'une classe
    Bonjour,

    pour tester les méthodes d'une classe, je voudrais créer un script qui permet à l'utilisateur de sélectionner une des méthodes de la classe puis de lancer l'exécution de celle-ci.

    Voici mon code qui ne marche pas (je m'en doutais) mais ça donne l'idée :

    Code php : 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
    <?php
    use classes\Ticket\Ticket;
    include(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php");
    include(DIR_ROOT."classes".DIRECTORY_SEPARATOR."Ticket.php");
    $tic=new Ticket();
    $meth=['Clean_Dbb','Csv_To_Db'];
    ?>
    <html>
    <body>
        <form method="post" action="" onchange="submit();">
        <select name="meth" id="">
        <option value="0">list of methods</option>
        <?php
            foreach($meth as $met) {
                echo "<option value='".$met."'>".$met."</option>";
            }
        ?>
        </select>
        </form>
    </body>
    </html>
    <?php
    if (isset($_POST['meth'])) 
    { 
        if ($_POST['meth']!="0") {
        ?>
            <a href='<?php $tic->$met;?>() target="_blank"'><?=$met ?></a>
        <?php
        }    
    }
    ?>

    message d'erreur :
    Notice: Undefined property: classes\Ticket\Ticket::$Csv_To_Db in C:\wamp64\www\ticket\methodes2\launch_method.php on line 25

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    arrête de délirer Laurent, une classe ne se teste pas du tout comme ça. Il faut utiliser un framework de tests comme PHPUnit et écrire patiemment ses tests un à un.
    C'est un très gros travail en plus du code de production.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Salut rawsrc,

    je ne m'y mets que cet après-midi.
    J'ai affiné mon délire, comme j'ai du mal à admettre ne pas pouvoir tester les méthodes tout seul.

    Code php : 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
    <?php
    use classes\Ticket\Ticket;
    include(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php");
    include(DIR_ROOT."classes".DIRECTORY_SEPARATOR."Ticket.php");
    $tic=new Ticket();
    $meth=['Clean_Dbb','Csv_To_Db'];
    ?>
    <html>
    <body>
        <form method="post" action="" onchange="submit();">
        <select name="meth" id="">
        <option value="0">list of methods</option>
        <?php
            foreach($meth as $met) {
                echo "<option value='".$met."'>".$met."</option>";
            }
        ?>
        </select>
        </form>
    </body>
    </html>
    <?php
    if (isset($_POST['meth'])) 
    { 
        if ($_POST['meth']!="0") {
        ?>
            <a href='#test_meth' target="_blank"><?=$_POST['meth'] ?></a>
            <div id="test_meth">
            <?php $tic->$_POST['meth'](); ?>
            </div>
        <?php
        }    
    }
    ?>

    Error: Function name must be a string in C:\wamp64\www\ticket\methodes2\launch_method.php on line 29
    y a de l'idée ou non, même si la syntaxe, c'est n'importe quoi ?

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Oui y a de l'idée mais pour pouvoir y parvenir, va falloir que tu gobes l'API PHP Reflection surtout ReflectionClass

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Ouh là, là, c'est super compliqué, mais ça, ça devrait pas aller ?

    Code php : 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
    <?php
    use classes\Ticket\Ticket;
    include(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php");
    include(DIR_ROOT."classes".DIRECTORY_SEPARATOR."Ticket.php");
    $tic=new Ticket();
    $meth=['Clean_Dbb','Csv_To_Db'];
    ?>
    <html>
    <body>
        <form method="post" action="" onchange="submit();">
        <select name="meth" id="">
        <option value="0">list of methods</option>
        <?php
            foreach($meth as $met) {
                echo "<option value='".$met."'>".$met."</option>";
            }
        ?>
        </select>
        </form>
    </body>
    </html>
    <?php
    if (isset($_POST['meth'])) 
    { 
        if ($_POST['meth']!="0") {
            switch($_POST['meth']) {
                case 'Clean_Dbb' : $tic->Clean_Dbb(); break;
                case 'Csv_To_Db' : $tic->Csv_To_Db(); break;
            }
        }    
    }
    ?>

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Pensant que cette technique tient la route, je l'ai gardée et l'ai enrichie d'une 3e méthode pour investiguer un problème vu dans une autre méthode.

    Code php : 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
    <?php
    use classes\Ticket\Ticket;
    include(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php");
    include(DIR_ROOT."classes".DIRECTORY_SEPARATOR."Ticket.php");
    $tic=new Ticket();
    $meth=['Clean_Dbb','Csv_To_Db', 'test'];
    ?>
    <html>
    <body>
        <form method="post" action="" onchange="submit();">
        <select name="meth" id="">
        <option value="0">list of methods</option>
        <?php
            foreach($meth as $met) {
                echo "<option value='".$met."'>".$met."</option>";
            }
        ?>
        </select>
        </form>
    </body>
    </html>
    <?php
    if (isset($_POST['meth'])) 
    { 
        if ($_POST['meth']!="0") {
            switch($_POST['meth']) {
                case 'Clean_Dbb' : $tic->Clean_Dbb(); break;
                case 'Csv_To_Db' : $tic->Csv_To_Db(); break;
                case 'test' : $tic->test(); break;
            }
        }    
    }
    ?>

    la partie intéressante de la classe Ticket :
    Code php : 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
    <?php
    namespace classes\Ticket;
    use classes\MYPDO\MYPDO;    //to use class MYPDO  
    include(dirname(__DIR__).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."config.php");//definition of the constants
    include(DIR_ROOT."classes".DIRECTORY_SEPARATOR."MYPDO.php");//definition of the class for DB
     
     
    class Ticket
    implements \ArrayAccess,\Countable
    {
    ...
    public function test(){
        ?>
          <!-- form to download a csv file from the hard disk -->
          <form action="" method="post" enctype="multipart/form-data">
            <label for="file2"><b>File CSV</b></label>
            <input type="file" name="file2" id="file2"><br/>
            <input type="submit" name="submitfile" value="csv file download"><br/>
            </form>
        <?php
        if (isset($_POST['submitfile'])) {echo "217 submitfile exists<br/>";
        }
        else echo "219 submitfile doesn't exist<br/>";
        //sleep(1000); 
    } //end method test()
    Mon souci : aucun des 2 echo ne s'affiche donc je ne sais pas dans quelle branche du code on passe. Comment faire ?

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Comme faire des echos ne convient pas pour tester, je les ai remplacés par une variable de session.

    Voici mon code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function test(){
        ?>
          <!-- form to download a csv file from the hard disk -->
          <form action="" method="post" enctype="multipart/form-data">
            <label for="file2"><b>File CSV</b></label>
            <input type="file" name="file2" id="file2"><br/>
            <input type="submit" name="submitfile2" value="csv file download"><br/>
            </form>
        <?php
        if (isset($_POST['submitfile2'])) {$_SESSION['test']="exists";
        }
        else $_SESSION['test']="don't exist";
    } //end method test()
    après l'appel de la méthode test, la variable de session vaut don't exist alors que j'ai bien sélectionné un fichier. Comment ça se fait ?

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    y a encore plus simple comme test : dans la classe Ticket, j'ai ajouté un attribut downloaded_file initialisé à FALSE dans le constructeur, et mis à TRUE dans la méthode test :
    if (isset($_POST['submitfile2'])) {$this->downloaded_file=TRUE;}. Après l'appel de test, je fais un var_dump($tic->downloaded_file); et ça vaut FALSE. Donc pourquoi ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/09/2010, 17h30
  2. Réponses: 2
    Dernier message: 15/09/2009, 16h55
  3. Surcharger les méthodes d'une class mère
    Par Djobird dans le forum Langage
    Réponses: 8
    Dernier message: 06/06/2008, 16h54
  4. Déclarer les méthodes d'une classe
    Par bandit_debutant dans le forum Langage
    Réponses: 5
    Dernier message: 22/11/2007, 13h43
  5. [Système] Problème avec les méthodes d'une classe
    Par oussama127 dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2006, 09h18

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