4.1 @Désactivé
Examinons maintenant quelques annotations très utiles et populaires du framework JUnit. La première annotation vous permet de désactiver un test spécifique afin que JUnit ne l'appelle pas. Il est nécessaire dans les cas où vous remarquez que le test ne fonctionne pas correctement, ou si vous modifiez le code et que le test s'interrompt accidentellement.
Comme je l'ai écrit plus tôt, 99% des tests ne sont pris en charge par personne, ils s'avèrent donc tous être désactivés tôt ou tard. Par conséquent, cette annotation est la première de la liste des annotations utiles.
Considérez son exemple :
public class AppTest {
@Disabled("Test is temporarily disabled. True, true")
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
Dans l'exemple ci-dessus, la méthode testOnDev()
ne sera pas appelée. D'ailleurs, l'annotation @Disabled
peut être écrite juste avant la déclaration de classe, alors toutes ses méthodes seront ignorées.
@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
4.2 @Imbriqué
JUnit vous permet d'appeler des méthodes de test sur des classes imbriquées. Je veux dire des classes de test imbriquées. Ce n'est pas un fait que vous les rencontrerez souvent, mais il y a une telle possibilité, vous devez donc comprendre ce que c'est.
Pour appeler les méthodes d'une classe imbriquée avant sa déclaration, il faut écrire une annotation @Nested
. Exemple:
public class AppTest {
@Nested
public class DevStagingEnvironment {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
@Nested
public class ProductionEnvironment {
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
}
Plus de détails peuvent être trouvés dans la documentation officielle .
4.3 @ExtendWith
Une autre annotation utile est @ExtendWith
. Vous la rencontrerez très probablement très souvent, alors regardons-la plus en détail.
JUnit est un framework puissant qui vous permet d'écrire divers plugins (extensions) pour une personnalisation flexible de votre travail. Certaines extensions peuvent collecter des statistiques sur les tests, d'autres peuvent émuler un système de fichiers en mémoire, d'autres peuvent émuler le travail à l'intérieur d'un serveur Web, etc.
Si votre code s'exécute dans un framework (par exemple, Spring), alors presque toujours ce framework gère la création et la configuration des objets dans votre code . Par conséquent, un plugin de test spécial est indispensable. Exemples:
Exemple 1. L'extension WebServerExtension
passe à la méthode de test appelée URL
pour fonctionner correctement.
@Test
@ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
WebClient webClient = new WebClient();
// Use WebClient to connect to web server using serverUrl and verify response
assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}
C'est ainsi que les tests commencent généralement à tester le code qui fonctionne avec le framework Spring :
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
crée une version de test du framework Spring, mais MockitoExtention
vous permet de créer de faux objets. Les faux objets sont un sujet très intéressant, nous y reviendrons certainement, mais un peu plus tard.
4.4 @Timeout
Terminons cette conférence par une petite annotation intéressante @Timeout
. Il vous permet de définir l'heure d'exécution du test. Si le test a pris plus de temps que spécifié dans l'annotation, il est considéré comme ayant échoué.
class TimeoutDemo {
@Test
@Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
Ceci conclut notre exposé.