Création d'un projet JUnit5 avec IntelliJ
* créer un projet
* placer le curseur sur le nom de la classe à tester
* ALT + ENTREE => une fenêtre s'affiche, choisir "nouveau test"
* remplir, et cocher la case "importer JUnit5" |
Test simple
<imports>
class FirstJUnit5Test {
@Test
void myFirstTest(){
assertEquals(2,1+1,"1+1 <> 2 ??");
}
}
|
Annotations
@BeforeAll, @AfterAll |
@BeforeEach, @AfterAll |
@Disabled("test non effectué, ce texte est affiché") |
@Disabled peut décorer des méthodes ou des classes |
@DisplayName("texte affiché lors des tests") |
@RepeatedTest(10) |
Tests paramétrés
@ParameterizedTest
@ValueSource(strings = { "Hello", "World" })
void testWithParams(String argument) {
assertNotNull(argument);
}
//possibilité d'exécuter un test plusieurs fois avec des arguments différents. A la place de assertNotNull il pourrait y avoir un appel de méthode, et/ou un bloc.
|
Tests paramétrés, type des paramètres
types de base |
String, int, long, or double |
enums |
voir doc |
méthode qui renvoie une collection |
voir doc |
Assertions, assertThrows
@Test
void exceptionTesting() {
Throwable exception = assertThrows(MyException.class, () -> {
throw new MyException("a message");
});
assertEquals("a message", exception.getMessage());
}
//à la place du throw nex MyException, mettre la méthode à tester et susceptible de déclencher une exception
|
|
|
assertTimeout
@Test
void timeoutNotExceededWithResult() {
int vrai=assertTimeout(ofMinutes(2),() ->{
return 10 ;
});
assertEquals(10, vrai);
}
// The assertion succeeds, and returns the supplied object.*
|
assertTimeout + appel de méthode
@Test
void timeoutNotExceededWithMethod() {
String ret = assertTimeout(ofMinutes(2),MyClass::greeting);
assertEquals("hello world!", ret);
// The assertion invokes a method reference and returns an object.
|
assertTimeout, arrêt forcé
assertTimeoutPreemptively |
utilisation comme assertTimeout |
|
arrêt et échec du test si timeout atteint |
Assertions
messages d'erreur |
assertEquals (1,2,"non égaux") --> le message est après |
asserts & lambdas |
AssertTrue(false,() -> "message évalué dynamiquement") |
assertAll |
assertAll("texte", () -> code avec asserts,() -> code avec asserts ); etc... |
|
même contexte pour les blocs |
Tests groupés
@Nested |
définit, à l'intérieur d'une classe de tests, une 2e classe de tests avec ses propres @BeforeAll etc... |
|