JUnit | Tester un seul parametre d'une méthode
Krimofcb
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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 :/
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 :/
A voir également:
- JUnit | Tester un seul parametre d'une méthode
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester son pc - Guide
- Remettre parametre usine pc - Guide
- Parametre dns - Guide
- Parametre windows - Guide
1 réponse
Bonjour,
"tester un paramètre en particulier d'une méthode, et non pas la méthode en entier et ce qu'elle retourne."
En complément de JUnit on utilise souvent Mockito pour faire des tests.
Ci-dessous un exemple complet librement inspiré de la description de ton programme.
Lorsque l'on appel
"tester un paramètre en particulier d'une méthode, et non pas la méthode en entier et ce qu'elle retourne."
En complément de JUnit on utilise souvent Mockito pour faire des tests.
Ci-dessous un exemple complet librement inspiré de la description de ton programme.
Lorsque l'on appel
ihm.boutonValider()dans le test, on peut vérifier que
creerFichierJsona bien été appelé et que les valeurs passées en paramètres sont bien celles que l'on pensait et pourtant on peut apercevoir que l'affichage du
System.out.printfne s'est pas fait, c'est parce que la vraie méthode n'a jamais été appelé (ce qui correspond exactement à ce que tu voulais faire).
- JsonService.java
public class JsonService {
public void creerFichierJson(String nom, String prenom, String mail, String telephone) {
System.out.printf("{'nom':'%s','prenom':'%s','mail':'%s','telephone':'%s'}", nom, prenom, mail, telephone);
}
}
- InterfaceGraphique.java
import javax.swing.JTextField;
public class InterfaceGraphique {
private JTextField nom = new JTextField();
private JTextField prenom = new JTextField();
private JTextField mail = new JTextField();
private JTextField telephone = new JTextField();
private JsonService jsonService = new JsonService();
public void boutonValider() {
getJsonService().creerFichierJson(
getNom().getText(),
getPrenom().getText(),
getMail().getText(),
getTelephone().getText());
}
// getXxx et setXxx
// ...
}
- InterfaceGraphiqueTest.java
import java.util.List;
import javax.swing.JTextField;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.*;
import org.mockito.invocation.Invocation;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class InterfaceGraphiqueTest {
@InjectMocks
private InterfaceGraphique ihm;
@Mock
private JTextField nomMock;
@Mock
private JTextField prenomMock;
@Mock
private JTextField mailMock;
@Mock
private JTextField telephoneMock;
@Mock
private JsonService jsonServiceMock;
@BeforeEach
public void beforeEach() {
ihm.setNom(nomMock);
ihm.setPrenom(prenomMock);
ihm.setMail(mailMock);
ihm.setTelephone(telephoneMock);
ihm.setJsonService(jsonServiceMock);
}
@Test
public void boutonValider() throws Exception {
Mockito.when(nomMock.getText()).thenReturn("MonNom");
Mockito.when(prenomMock.getText()).thenReturn("MonPrenom");
Mockito.when(mailMock.getText()).thenReturn("MonMail");
Mockito.when(telephoneMock.getText()).thenReturn("MonTelephone");
ihm.boutonValider();
List<Invocation> invocations = (List<Invocation>) Mockito.mockingDetails(jsonServiceMock).getInvocations();
Assertions.assertEquals(1, invocations.size(), "JsonService doit avoir été appelé exactement 1 fois");
Assertions.assertEquals(
JsonService.class.getMethod("creerFichierJson", String.class, String.class, String.class, String.class),
invocations.get(0).getMethod(),
"La méthode appelée doit être JsonService.creerFichierJson");
Assertions.assertArrayEquals(
new Object[] {"MonNom", "MonPrenom", "MonMail", "MonTelephone"},
invocations.get(0).getArguments(),
"Les valeurs passées en paramètre de creerFichierJson doivent correspondre à celles attendues");
}
}
- pom.xml
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.6.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
</dependencies>
J'ai juste rajouté une bibliothèque complémentaire (Mockito) car je ne vois pas comment tu pourrais y arriver avec JUnit seul, à moins de refaire ce que fait déjà Mockito...