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

Java Discussion :

JUnit | Tester un seul parametre d'une méthode


Sujet :

Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut JUnit | Tester un seul parametre d'une méthode
    Bonjour à tous,

    Assez novice avec l'utilisation de JAVA et de JUnit, je me retrouve aujourd'hui confronté à un problème.

    J'ai via un interface graphique créer un petit formulaire qui comprend différent JtextField avec le nom, prénom, adresse mail, numéro de téléphone entre autre.
    Il y a également un bouton à la fin de se formulaire qui permet de valider nos infos une fois que l'on a complété tout les champs.
    Lorsque l'on appuie sur ce bouton on fait appel à une fonction dans une autre classe avec l'ensemble des Strings récupérer, pour que cette fonction créer un fichier json avec toutes ces données.

    Classe interface graphique --> personne complete les champs --> personne appuie sur bouton valider --> appel a fonction creerFichierJson dans une autre classe en lui envoyant en parametre nom, prenom, adresse mail et numéro de tel.

    Tout cela j'ai réussi à le faire. Maintenance ce dont j'aurais besoin c'est de l'aide de votre part afin de savoir si il est possible grâce à JUnit de tester les différents paramètres utiliser dans la fonction creerFichierJson. J'entend par la tester par exemple que l'adresse mail comprend bien "@", ou que le nom et prénom soit bien que des lettres. J'ai vu différentes choses sur Internet avec assertThat, contains, assertTrue, JUnitParams etc... mais ce que je n'ai pas trouvé c'est comment est-ce possible dans un test JUnit de tester un paramètre en particulier d'une méthode, et non pas la méthode en entier et ce qu'elle retourne.

    Voila, j'espère que j'ai réussi à vous faire comprendre mon besoin.

    Merci d'avance pour votre aide

    PS: désolé pour les fautes d'orthographe, ce n'est pas mon point fort :/

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Bonjour,

    Le meilleur moyen de tester une partie d'une méthode est d'extraire cette partie dans une autre méthode. Un test effectue un appel et vérifie le résultat. Normalement, le code de test ne doit pas s'occuper du code de la méthode testée. Uniquement effectuer l'appel et comparer le résultat effectif et celui attendu. tu peux poster une partie de ton code si tu le souhaites, ça aidera à conseiller

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    Bonjour,

    Le meilleur moyen de tester une partie d'une méthode est d'extraire cette partie dans une autre méthode. Un test effectue un appel et vérifie le résultat. Normalement, le code de test ne doit pas s'occuper du code de la méthode testée. Uniquement effectuer l'appel et comparer le résultat effectif et celui attendu. tu peux poster une partie de ton code si tu le souhaites, ça aidera à conseiller
    Merci pour ta réponse. Il faudrait donc que pour chaque Jtextfield que je veux tester, créer une méthode qui retourne son contenu et du coup dans JUnit créer pour chacune de ces méthodes dés test ?

    Ps : je vais poster mon code dans quelques minutes

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    public InterfaceGraphique() {
     
    		JFrame fenetre = new JFrame();
    		fenetre.setTitle("LocaSki");
    		fenetre.setSize(500,500);
    		fenetre.setLocationRelativeTo(null);
    		fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		fenetre.setResizable(false);
    		fenetre.setAlwaysOnTop(true);
     
    		JPanel pan = new JPanel();
    		pan.setBackground(Color.WHITE);
    		pan.setLayout(new GridLayout(9,1));
     
    		JPanel panciv = new JPanel();
    		panciv.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JComboBox civilite = new JComboBox();
    		JLabel labelciv = new JLabel ("Civilite : ");
    		civilite.setPreferredSize(new Dimension(150,25));
    		civilite.addItem("");
    		civilite.addItem("Monsieur");
    		civilite.addItem("Madame");
    		civilite.addItem("Autre");
    		panciv.add(labelciv);
    		panciv.add(civilite);
    		panciv.setBackground(Color.WHITE);
    		pan.add(panciv);
     
    		JPanel pannom = new JPanel();
    		pannom.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JTextField nom = new JTextField();
    		JLabel labelnom = new JLabel("Nom : ");
    		nom.setPreferredSize(new Dimension(150,25));
    		pannom.add(labelnom);
    		pannom.add(nom);
    		pannom.setBackground(Color.WHITE);
    		pan.add(pannom);
     
    		JPanel panprenom = new JPanel();
    		panprenom.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JTextField prenom = new JTextField();
    		JLabel labelprenom = new JLabel("Prenom : ");
    		prenom.setPreferredSize(new Dimension(150,25));
    		panprenom.add(labelprenom);
    		panprenom.add(prenom);
    		panprenom.setBackground(Color.WHITE);
    		pan.add(panprenom);
     
    		JPanel panmail = new JPanel();
    		panmail.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JTextField mail = new JTextField();
    		JLabel labelmail = new JLabel("E-mail : ");
    		mail.setPreferredSize(new Dimension(150,25));
    		panmail.add(labelmail);
    		panmail.add(mail);
    		panmail.setBackground(Color.WHITE);
    		pan.add(panmail);
     
    		JPanel pantel = new JPanel();
    		pantel.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JTextField tel = new JTextField();
    		JLabel labeltel = new JLabel("Tel : ");
    		tel.setPreferredSize(new Dimension(150,25));
    		pantel.add(labeltel);
    		pantel.add(tel);
    		pantel.setBackground(Color.WHITE);
    		pan.add(pantel);
     
     
    		JPanel panresa = new JPanel();
    		JButton bouton = new JButton("Reserver");
    		bouton.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent e)  {
    				TicketReservation ticket = new TicketReservation();
     
    				if (civilite.getSelectedItem().toString().equals("") || nom.getText().equals("") || prenom.getText().equals("") || mail.getText().equals("") || tel.getText().equals("")) {
    					JOptionPane.showMessageDialog(fenetre,"Veuillez completer les champs manquants !");
    				}else {
    					try {
    						ticket.creer(civilite.getSelectedItem().toString(), nom.getText(), prenom.getText(), mail.getText(), tel.getText());
     
    					}catch (IOException e1) {
    						e1.printStackTrace();
    					}	
     
    				}
     
    			}
     
    		});
     
     
    		panresa.add(bouton);
    		panresa.setBackground(Color.WHITE);
    		pan.add(panresa);
     
    		fenetre.setContentPane(pan);
     
    		fenetre.setVisible(true);
     
     
    	}
    Voila concernant le code c'est un petit formulaire basique, et ce sont donc ces champs que je veux tester avec JUnit une fois qui sont remplis. Ce que j'aurais voulu pouvoir faire grâce à JUnit, c'est tester que l'adresse mail contient bien un @, que le numero de tel contient bien uniquement des chiffre, et que le nom et prenom contiennent bien uniquement des lettres.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Après mûre réflexion je n'arrive pas a trouver de solution même en suivant la logique que vous m'avez donné :/

  6. #6
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par krimofcb Voir le message
    Après mûre réflexion je n'arrive pas a trouver de solution même en suivant la logique que vous m'avez donné :/
    Quel est le code qu'il faut tester ? Hier c'était "creerFichierJson". Aujourd'hui ce serait "ticket.creer" ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Oui en faite c'est quand je clique sur le bouton "Reserver" je voudrais tester tout les champs comme je l'ai dis precedemment

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    ticket.creer() permet juste de creer un fichier json avec l'ensemble des champs complétés.

    Et pour tester ces champs je doit utiliser obligatoirement JUnit.

  9. #9
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par krimofcb Voir le message
    je doit utiliser obligatoirement JUnit.
    Normalement JUnit sert aux tests unitaires. L'utiliser "en production" est un peu particulier. Mais bon, si c'est imposé.
    Les assertions de JUnit comportent assertThat (cf https://jmdoudoux.developpez.com/cou...unit.php#junit) qui permet l'usage d'expressions régulières : https://stackoverflow.com/questions/...tches-in-junit
    Les expressions régulières permettent en particulier de vérifier ceci :
    tester que l'adresse mail contient bien un @, que le numero de tel contient bien uniquement des chiffre, et que le nom et prenom contiennent bien uniquement des lettres.
    Et les contrôles devraient se placer avant l'appel de ticket.creer(...), donc dans le gestionnaire d'événement il faudrait remplacer les tests sur les champs saisis par une série de tests "unitaires" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Override
             public void actionPerformed(ActionEvent e)  {
                TicketReservation ticket = new TicketReservation();
     
                if (civilite.getSelectedItem().toString().equals("") || nom.getText().equals("") || prenom.getText().equals("") || mail.getText().equals("") || tel.getText().equals("")) {
                    JOptionPane.showMessageDialog(fenetre,"Veuillez completer les champs manquants !"); 
    
                     }else {

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Justement c'est ces test unitaires que je n'arrive pas a faire.

    Pour faire un test sur un élément par exemple l'adresse mail il faut donc que je crée une fonction qui retourne l'adresse mail et ensuite dans JUnit faire un test sur cette fonction pour vérifier qu'il y a bien un "@" dedans non ?

    Le problème c'est que je n'arrive pas à trouver de solution pour faire cela, si vous avez une solution et que vous pouvez me montrer un exemple juste pour un des cas, cela m'aiderais grandement.

    Merci pour votre aide.

Discussions similaires

  1. Méthode variadic en parametre d'une méthode template
    Par CedricMocquillon dans le forum C++
    Réponses: 4
    Dernier message: 15/12/2017, 15h08
  2. Une seule execution d'une méthode
    Par jamesandrew dans le forum C++
    Réponses: 4
    Dernier message: 27/08/2016, 09h48
  3. Réponses: 8
    Dernier message: 19/10/2009, 11h00
  4. changer automatiquement les parametres d'une méthode
    Par wariom dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/05/2009, 09h45
  5. [Reflection]Instanciation d'object en parametre d'une méthode
    Par mezoo dans le forum API standards et tierces
    Réponses: 19
    Dernier message: 31/08/2006, 12h00

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