CodeGym /Cours Java /Module 3 /Configurer un environnement de test dans JUnit

Configurer un environnement de test dans JUnit

Module 3
Niveau 3 , Leçon 2
Disponible

3.1 Annotations @BeforeEach, @AfterEach

Notez que dans l'exemple précédent, dans chaque méthode nous devions écrire du code pour créer un objetcalculatrice.

Bien sûr, ce n'est qu'une ligne, mais si nous testons de vrais systèmes, nous aurons souvent une situation où nous devons créer et configurer plusieurs objets, ce qui peut prendre plusieurs dizaines de lignes de code. Exemple:

//Create an HttpClient object
   HttpClient client = HttpClient.newBuilder()
    	.version(Version.HTTP_1_1)
    	.followRedirects(Redirect.NORMAL)
        .connectTimeout(Duration.ofSeconds(20))
    	.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
        .authenticator(Authenticator.getDefault())
    	.build();

   //Create an HttpRequest object
  HttpRequest request = HttpRequest.newBuilder()
     .uri(new URI("https://codegym.cc"))
     .headers("Content-Type", " application/octet-stream")
     .POST( HttpRequest.BodyPublishers. ofInputStream ( () -> is; ))
     .build();

   //Call the send() method
   HttpResponse response = client.send(request, BodyHandlers.ofString());
   System.out.println(response.statusCode());
   System.out.println(response.body());

Dans l'exemple ci-dessus, nous avons créé et configuré un objetClient HTTPet que vous souhaitez tester la méthode send() .

Pour qu'à chaque fois dans la méthode de test ne pas écrire la création d'un objetClient HTTP, il peut être déplacé vers une méthode distincte et recevoir une annotation spéciale @BeforeEach . Ensuite, Junit appellera cette méthode avant chaque méthode de test. Exemple:

class HttpClientTest {
     	public HttpClient client;

   	@BeforeEach
    	public void init(){
   	   client = HttpClient.newBuilder()
   	        .version(Version.HTTP_1_1)
   	        .followRedirects(Redirect.NORMAL)
   	        .connectTimeout(Duration.ofSeconds(20))
   	        .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
   	        .authenticator(Authenticator.getDefault())
   	        .build();
    	}

   	@Test
    	public void send200() throws Exception {
     	   //Create an HttpRequest() object
         	HttpRequest request = HttpRequest.newBuilder(new URI("https://codegym.cc")).build();

     	   //Call the send() method
     	   HttpResponse response = client.send(request, BodyHandlers.ofString());
        	assertEquals(200, response.statusCode());
        }

   	@Test
    	public void send404() throws Exception {
     	   //Create an HttpRequest() object
         	HttpRequest request = HttpRequest.newBuilder(new URI("https://codegym.cc/unknown")).build();

     	   //Call the send() method
     	   HttpResponse response = client.send(request, BodyHandlers.ofString());
        	assertEquals(404, response.statusCode());
    	}
}

Vous pouvez également créer une méthode spéciale qui sera appelée à chaque fois après la prochaine méthode de test, et nettoyer les ressources utilisées , écrire quelque chose dans le journal, etc. Une telle méthode doit être marquée avec l' annotation @AfterEach .

Si vous avez 3 méthodes de test test1() , test2() et test3() , alors l'ordre d'appel sera :

  • avantChaque méthode
  • test1()
  • Méthode AfterEach
  • avantChaque méthode
  • test2()
  • Méthode AfterEach
  • avantChaque méthode
  • test3()
  • Méthode AfterEach

3.2 Annotations @AvantTout, @AprèsTout

JUnit vous permet également d'ajouter une méthode qui sera appelée une fois avant toutes les méthodes de test . Une telle méthode doit être annotée avec @BeforeAll . Il a également une paire d'annotations @AfterAll . La méthode marquée sera appelée par JUnit après toutes les méthodes de test.

Écrivons un exemple spécial qui vous permet de mieux comprendre comment tout cela fonctionne. Prenons le test de notre calculatrice comme base :

class CalculatorTest {
    private Calculator calc = new Calculator();

    @BeforeAll
    public static void init(){
        System.out.println("BeforeAll init() method called");
    }

    @BeforeEach
    public void initEach(){
        System.out.println("BeforeEach initEach() method called");
    }

    @Test
    public void add(){
        System.out.println("Testing Addition");
    }

    @Test
    public void sub() {
        System.out.println("Testing Subtraction");
    }

    @Test
    public void mul(){
        System.out.println("Testing Multiplication");
    }

    @Test
    public void div() {
        System.out.println("Testing Division");
    }
}

Ce test imprimera le texte suivant sur la console :


BeforeAll init() method called
BeforeEach initEach() method called
Testing Addition
 
BeforeEach initEach() method called
Testing Subtraction
 
BeforeEach initEach() method called
Testing Multiplication
 
BeforeEach initEach() method called
Testing Division
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION