JUnit Tutoriel d'annotations avec exemple : Qu'est-ce que @Test et @After
Qu'est-ce que le JUnit Annotation ?
JUnit Annotations est une forme spรฉciale de mรฉtadonnรฉes syntaxiques qui peuvent รชtre ajoutรฉes ร Java code source pour une meilleure lisibilitรฉ et structure du code. Les variables, paramรจtres, packages, mรฉthodes et classes peuvent รชtre annotรฉs. Les annotations ont รฉtรฉ introduites dans Junit4, ce qui rend Java code plus lisible et plus simple. C'est la grande diffรฉrence entre Junit3 et Junit4 : Junit4 est basรฉ sur les annotations.
Avec la connaissance des annotations dans Junit5, on peut facilement apprendre et mettre en ลuvre un JUnit test. Vous trouverez ci-dessous les informations importantes et frรฉquemment utilisรฉes JUnit liste d'annotations :
| S.No. | Annotations | Description |
|---|---|---|
| 1. | @Tester | Cette annotation remplace org.junit.TestCase qui indique que la mรฉthode public void ร laquelle elle est attachรฉe peut รชtre exรฉcutรฉe en tant que scรฉnario de test. |
| 2. | @Avant que | Cette annotation est utilisรฉe si vous souhaitez exรฉcuter une instruction telle que des conditions prรฉalables avant chaque scรฉnario de test. |
| 3. | @Avant les cours | Cette annotation est utilisรฉe si vous souhaitez exรฉcuter certaines instructions avant tous les cas de test, par exemple la connexion de test doit รชtre exรฉcutรฉe avant tous les cas de test. |
| 4. | @Aprรจs | Cette annotation peut รชtre utilisรฉe si vous souhaitez exรฉcuter certaines instructions aprรจs chaque Cas de test par exemple, rรฉinitialiser les variables, supprimer des fichiers temporaires, des variables, etc. |
| 5. | @Aprรจs les cours | Cette annotation peut รชtre utilisรฉe si vous souhaitez exรฉcuter certaines instructions aprรจs tous les scรฉnarios de test, par exemple en libรฉrant des ressources aprรจs l'exรฉcution de tous les scรฉnarios de test. |
| 6. | @Ne tient pas compte | Cette annotation peut รชtre utilisรฉe si vous souhaitez ignorer certaines instructions lors de l'exรฉcution du test, par exemple en dรฉsactivant certains scรฉnarios de test lors de l'exรฉcution du test. |
| 7. | @Test(dรฉlai d'attente=500) | Cette annotation peut รชtre utilisรฉe si vous souhaitez dรฉfinir un dรฉlai d'attente pendant l'exรฉcution des tests, par exemple si vous travaillez sous un SLA (accord de niveau de service) et que les tests doivent รชtre terminรฉs dans un dรฉlai spรฉcifiรฉ. |
| 8. | @Test (expected = IllegalArgumentException.class) | Cette annotation peut รชtre utilisรฉe si vous souhaitez gรฉrer une exception lors de l'exรฉcution du test. Par exemple, si vous souhaitez vรฉrifier si une mรฉthode particuliรจre lรจve ou non une exception spรฉcifiรฉe. |
JUnit Exemple d'annotations
Crรฉons une classe couvrant les sujets importants JUnit annotations avec des instructions d'impression simples et exรฉcutez-les avec une classe d'exรฉcution de tests :
รtape 1) Considรฉrez ci-dessous la classe Java ayant diverses mรฉthodes attachรฉes aux annotations rรฉpertoriรฉes ci-dessus :
Exemple d'annotations Junit.java
package guru99.junit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.ArrayList;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class JunitAnnotationsExample {
private ArrayList<String> list;
@BeforeClass
public static void m1() {
System.out.println("Using @BeforeClass , executed before all test cases ");
}
@Before
public void m2() {
list = new ArrayList<String>();
System.out.println("Using @Before annotations ,executed before each test cases ");
}
@AfterClass
public static void m3() {
System.out.println("Using @AfterClass ,executed after all test cases");
}
@After
public void m4() {
list.clear();
System.out.println("Using @After ,executed after each test cases");
}
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
@Ignore
public void m6() {
System.out.println("Using @Ignore , this execution is ignored");
}
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
@Test(expected = NoSuchMethodException.class)
public void m8() {
System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");
}
}
รtape 2) Crรฉons une classe d'exรฉcuteur de tests pour exรฉcuter le test ci-dessus :
TestRunner.java
package guru99.junit;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitAnnotationsExample.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println("Result=="+result.wasSuccessful());
}
}
rรฉsultat attendu
- Tous les cas de test seront exรฉcutรฉs un par un et toutes les instructions d'impression seront visibles sur une console.
- Comme indiquรฉ dans le tableau ci-dessus @Avant l'annotation dans JUnit, @BeforeClass [ mรฉthode m1() et m2() ] sera exรฉcutรฉe respectivement avant chaque et avant tous les cas de test.
- De la mรชme maniรจre @After dans JUnit, @afterClass (mรฉthodes m3() et m4()) sera exรฉcutรฉ respectivement aprรจs chaque et aprรจs tous les cas de test. @ignore (mรฉthode m6())sera traitรฉ comme ignorant le test.
Analysons en dรฉtail les cas de test utilisรฉs dans la classe Java ci-dessus :
- Considรฉrez la mรฉthode m5() comme indiquรฉ ci-dessous :
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
Dans la mรฉthode ci-dessus, lorsque vous ajoutez une chaรฎne dans la variable ยซ list ยป, donc
- liste.isEmpty() retournera faux.
- assertFalse(list.isEmpty()) doit retourner vrai.
- En consรฉquence, le scรฉnario de test sera pass.
Comme vous nโavez ajoutรฉ quโune seule chaรฎne dans la liste, la taille est donc une.
- liste.size() doit renvoyer la valeur int comme ยซ 1 ยป.
- So assertEquals(1, list.size()) doit retourner vrai.
- En consรฉquence, le scรฉnario de test sera pass.
- Considรฉrez la mรฉthode m7() comme indiquรฉ ci-dessous :
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Comme discutรฉ ci-dessus @Test (dรฉlai d'attente = 10)L'annotation est utilisรฉe pour appliquer un dรฉlai d'attente dans le scรฉnario de test.
- Considรฉrez la mรฉthode m8() comme indiquรฉ ci-dessous :
@Test(expected = NoSuchMethodException.class)
public void m8() {
System.out.println("Using @Test(expected) ,it will check for specified exception during its execution");
}
Comme discutรฉ ci-dessus @Test (attendu) vรฉrifiera l'exception spรฉcifiรฉe lors de son exรฉcution, donc la mรฉthode m8() lancera ยซ Aucune exception de mรฉthode de ce type ยป. En consรฉquence, le test sera exรฉcutรฉ avec une exception.
Comme tous les cas de test sont rรฉussis, cela entraรฎne une exรฉcution rรฉussie du test.
Rรฉsultat actuel
Comme il y a trois cas de test dans l'exemple ci-dessus, tous les cas de test seront exรฉcutรฉs un par un. Voir la sortie ci-dessous :

Voir ci-dessous les dรฉclarations d'impression visibles sur la console :
Utilisation de @BeforeClass , exรฉcutรฉ avant tous les cas de test
Utilisation des annotations @Before, exรฉcutรฉes avant chaque cas de test
Utilisation de @After, exรฉcutรฉ aprรจs chaque cas de test
Utilisation des annotations @Before, exรฉcutรฉes avant chaque cas de test
En utilisant @Test(timeout), il peut รชtre utilisรฉ pour appliquer un dรฉlai d'attente dans JUnit4 cas de tests
Utilisation de @After, exรฉcutรฉ aprรจs chaque cas de test
Utilisation des annotations @Before, exรฉcutรฉes avant chaque cas de test
En utilisant @Test (attendu), il vรฉrifiera l'exception spรฉcifiรฉe lors de son exรฉcution
Utilisation de @After, exรฉcutรฉ aprรจs chaque cas de test
Utilisation de @AfterClass, exรฉcutรฉ aprรจs tous les cas de test
JUnit Classe d'affirmation
Cette classe fournit un ensemble de mรฉthodes d'assertion utiles pour รฉcrire un scรฉnario de test. Si toutes les instructions assert sont rรฉussies, les rรฉsultats du test sont rรฉussis. Si une instruction assert รฉchoue, les rรฉsultats du test รฉchouent.
Comme vous l'avez vu prรฉcรฉdemment, le tableau ci-dessous dรฉcrit les mรฉthodes d'assertion importantes et leur description :
| S.No. | Mรฉthode | Description |
|---|---|---|
| 1. | void assertEquals (boolรฉen attendu, boolรฉen rรฉel) | Il vรฉrifie si deux valeurs sont รฉgales, similaires ร la mรฉthode รฉgale de la classe Object. |
| 2. | void assertFalse (condition boolรฉenne) | la fonctionnalitรฉ consiste ร vรฉrifier quโune condition est fausse. |
| 3. | void assertNotNull (objet objet) | La fonctionnalitรฉ ยซ assertNotNull ยป consiste ร vรฉrifier qu'un objet n'est pas nul. |
| 4. | void assertNull (objet objet) | La fonctionnalitรฉ ยซ assertNull ยป consiste ร vรฉrifier qu'un objet est nul. |
| 5. | void assertTrue (condition boolรฉenne) | La fonctionnalitรฉ ยซ assertTrue ยป consiste ร vรฉrifier qu'une condition est vraie. |
| 6. | รchec nul() | Si vous souhaitez gรฉnรฉrer une erreur d'assertion, vous avez fail() qui aboutit toujours ร un verdict d'รฉchec. |
| 7. | void assertSame ([String message] | La fonctionnalitรฉ ยซ assertSame ยป consiste ร vรฉrifier que les deux objets font rรฉfรฉrence au mรชme objet. |
| 8. | void assertNotSame ([String message] | La fonctionnalitรฉ ยซ assertNotSame ยป consiste ร vรฉrifier que les deux objets ne font pas rรฉfรฉrence au mรชme objet. |
JUnit Classe de cas de test
Pour exรฉcuter plusieurs tests, la classe TestCase est disponible dans org.junit.TestCase paquets. L'annotation @Test indique JUnit que cette mรฉthode public void (Cas de test ici) ร laquelle elle est attachรฉe peut รชtre exรฉcutรฉe comme scรฉnario de test.
Le tableau ci-dessous montre quelques mรฉthodes importantes disponibles dans org.junit.TestCase classe:
| S.No. | Mรฉthode | Description |
|---|---|---|
| 1. | int countTestCases() | Cette mรฉthode est utilisรฉe pour compter le nombre de cas de test exรฉcutรฉs par exรฉcuter (TestResult tr) mรฉthode. |
| 2. | TestResult crรฉerResult() | Cette mรฉthode est utilisรฉe pour crรฉer un Rรฉsultat du test objet. |
| 3. | Chaรฎne getName () | Cette mรฉthode renvoie une chaรฎne qui n'est rien d'autre qu'un Cas de test. |
| 4. | Exรฉcution du rรฉsultat du test() | Cette mรฉthode est utilisรฉe pour exรฉcuter un test qui renvoie un Rรฉsultat du test objet |
| 5. | exรฉcution nulle (rรฉsultat TestResult) | Cette mรฉthode permet d'exรฉcuter un test ayant un Rรฉsultat du test objet qui ne renvoie rien. |
| 6. | void setName (nom de chaรฎne) | Cette mรฉthode est utilisรฉe pour dรฉfinir le nom d'un Cas de test. |
| 7. | void setup() | Cette mรฉthode est utilisรฉe pour รฉcrire du code d'association de ressources. par exemple Crรฉer une connexion ร une base de donnรฉes. |
| 8. | annuler le dรฉmontage() | Cette mรฉthode est utilisรฉe pour รฉcrire le code de version de ressource. Par exemple, libรฉrer la connexion ร la base de donnรฉes aprรจs avoir effectuรฉ une opรฉration de transaction. |
JUnit Classe TestResult
Lorsque vous exรฉcutez un test, il renvoie un rรฉsultat (sous forme de Rรฉsultat du test objet). Cet objet TestResult peut รชtre utilisรฉ pour analyser l'objet rรฉsultant. Ce rรฉsultat de test peut รชtre un รฉchec ou un succรจs.
Voir le tableau ci-dessous pour les mรฉthodes importantes utilisรฉes dans la classe org.junit.TestResult :
| S.No. | Mรฉthode | Description |
|---|---|---|
| 1. | void addError (Test test, Throwable t) | Cette mรฉthode est utilisรฉe si vous avez besoin d'ajouter une erreur au test. |
| 2. | void addFailure (Test test, AssertionFailedError t) | Cette mรฉthode est utilisรฉe si vous souhaitez ajouter un รฉchec ร la liste des รฉchecs. |
| 3. | void endTest(Test test) | Cette mรฉthode est utilisรฉe pour notifier qu'un test est effectuรฉ (terminรฉ) |
| 4. | int nombre d'erreurs() | Cette mรฉthode est utilisรฉe pour obtenir l'erreur dรฉtectรฉe lors de l'exรฉcution du test. |
| 5. | รnumรฉration les erreurs() | Cette mรฉthode renvoie simplement une collection (Enumeration ici) d'erreurs. |
| 6. | int รฉchecCount() | Cette mรฉthode est utilisรฉe pour obtenir le nombre d'erreurs dรฉtectรฉes lors de l'exรฉcution du test. |
| 7. | exรฉcution annulรฉe (test TestCase) | Cette mรฉthode est utilisรฉe pour exรฉcuter un scรฉnario de test. |
| 8. | int runCount() | Cette mรฉthode compte simplement le test exรฉcutรฉ. |
| 9. | void startTest (Test test) | Cette mรฉthode est utilisรฉe pour notifier qu'un test est dรฉmarrรฉ. |
| 10. | annuler l'arrรชt() | Cette mรฉthode est utilisรฉe pour tester l'exรฉcution ร arrรชter. |
JUnit Classe de suite de tests
Si vous souhaitez exรฉcuter plusieurs tests dans un ordre spรฉcifiรฉ, cela peut รชtre fait en combinant tous les tests en un seul endroit. Cet endroit est appelรฉ les suites de tests.
Voir le tableau ci-dessous pour les mรฉthodes importantes utilisรฉes dans org.junit.TestSuite classe:
| S.No. | Mรฉthode | Description |
|---|---|---|
| 1. | void addTest (Test test) | Cette mรฉthode est utilisรฉe si vous souhaitez ajouter un test ร la suite. |
| 2. | void addTestSuite(Classe classe de test) | Cette mรฉthode est utilisรฉe si vous souhaitez spรฉcifier la classe lors de l'ajout d'un test ร la suite. |
| 3. | int countTestCases() | Cette mรฉthode est utilisรฉe si vous souhaitez compter le nombre de cas de test. |
| 4. | Chaรฎne getName () | Cette mรฉthode est utilisรฉe pour obtenir le nom de la suite de tests. |
| 5. | exรฉcution nulle (rรฉsultat TestResult) | Cette mรฉthode est utilisรฉe pour exรฉcuter un test et collecter le rรฉsultat du test dans Rรฉsultat du test objet. |
| 6. | void setName (nom de chaรฎne) | Cette mรฉthode est utilisรฉe pour dรฉfinir le nom de Suite de tests. |
| 7. | Test testAt (index int) | Cette mรฉthode est utilisรฉe si vous souhaitez renvoyer le test ร un index donnรฉ. |
| 8. | int testCount() | Cette mรฉthode est utilisรฉe si vous souhaitez renvoyer un certain nombre de tests dans la Suite. |
| 9. | Avertissement de test statique (message de chaรฎne) | Cette mรฉthode renvoie un test qui รฉchouera et enregistrera un message d'avertissement. |
Rรฉsumรฉ
- JUnit fournit une API portable, qui fournit toutes les classes importantes et Selenium annotations utiles pour rรฉdiger un test unitaire.
- Des cours trรจs utiles lors de la rรฉdaction d'un cas de test
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Important et frรฉquemment utilisรฉ JUnit liste d'annotations@Avant@AvantClasse@Aprรจs
@Aprรจs les cours
@Tester
@Ignorer
