CodeGym /Java Course /Module 3 /Inrichten van een testomgeving in JUnit

Inrichten van een testomgeving in JUnit

Module 3
Niveau 3 , Les 2
Beschikbaar

3.1 Annotaties @BeforeEach, @AfterEach

Merk op dat we in het vorige voorbeeld in elke methode code moesten schrijven om een ​​object te makenrekenmachine.

Dit is natuurlijk maar één regel, maar als we echte systemen testen, zullen we vaak een situatie hebben waarin we verschillende objecten moeten maken en configureren, wat enkele tientallen regels code kan vergen. Voorbeeld:

//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());

In het bovenstaande voorbeeld hebben we een object gemaakt en geconfigureerdHttpClienten wil de methode send() testen .

Zodat elke keer in de testmethode niet de creatie van een object schrijftHttpClient, kan het naar een aparte methode worden verplaatst en een speciale @BeforeEach annotatie krijgen . Dan roept Junit deze methode voor elke testmethode aan. Voorbeeld:

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());
    	}
}

U kunt ook een speciale methode maken die elke keer wordt aangeroepen na de volgende testmethode, en de gebruikte bronnen opschonen , iets naar het logboek schrijven, enz. Een dergelijke methode moet worden gemarkeerd met de annotatie @AfterEach .

Als je 3 testmethodes test1() , test2() en test3() hebt , dan is de aanroepvolgorde:

  • voorElke methode
  • proef1()
  • Na elke methode
  • voorElke methode
  • proef2()
  • Na elke methode
  • voorElke methode
  • proef3()
  • Na elke methode

3.2 Annotaties @BeforeAll, @AfterAll

Met JUnit kunt u ook een methode toevoegen die vóór alle testmethoden een keer wordt aangeroepen . Een dergelijke methode moet worden geannoteerd met @BeforeAll . Het heeft ook een gekoppelde @AfterAll- annotatie . De methode die ermee is gemarkeerd, wordt na alle testmethoden door JUnit aangeroepen.

Laten we een speciaal voorbeeld schrijven waarmee u beter kunt begrijpen hoe het allemaal werkt. Laten we het testen van onze rekenmachine als basis nemen:

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");
    }
}

Deze test drukt de volgende tekst af naar de 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
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION