CodeGym/Java kursus/Modul 3/Opsætning af et testmiljø i JUnit

Opsætning af et testmiljø i JUnit

Ledig

3.1 Annoteringer @BeforeEach, @AfterEach

Bemærk, at vi i det foregående eksempel i hver metode skulle skrive kode for at skabe et objektlommeregner.

Dette er selvfølgelig kun én linje, men hvis vi tester rigtige systemer, vil vi ofte have en situation, hvor vi skal oprette og konfigurere flere objekter, som kan tage flere dusin linjer kode. Eksempel:

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

I eksemplet ovenfor har vi oprettet og konfigureret et objektHttpClientog ønsker at teste send() metoden .

Så hver gang i testmetoden ikke at skrive oprettelsen af ​​et objektHttpClient, kan den flyttes til en separat metode og få en speciel @BeforeEach annotation . Så vil Junit kalde denne metode før hver testmetode. Eksempel:

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

Du kan også oprette en speciel metode, der vil blive kaldt hver gang efter næste testmetode, og rydde op i de brugte ressourcer , skrive noget til loggen osv. En sådan metode skal markeres med @AfterEach annotationen .

Hvis du har 3 testmetoder test1() , test2() og test3() , vil opkaldsordren være:

  • før hver metode
  • test1()
  • Efter hver metode
  • før hver metode
  • test2()
  • Efter hver metode
  • før hver metode
  • test3()
  • Efter hver metode

3.2 Annoteringer @BeforeAll, @AfterAll

JUnit giver dig også mulighed for at tilføje en metode, der vil blive kaldt én gang før alle testmetoder . Sådan en metode bør annoteres med @BeforeAll . Den har også en parret @AfterAll- annotation . Metoden markeret med det vil blive kaldt af JUnit efter alle testmetoder.

Lad os skrive et særligt eksempel, der giver dig mulighed for bedre at forstå, hvordan det hele fungerer. Lad os tage test af vores lommeregner som grundlag:

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

Denne test udskriver følgende tekst til konsollen:


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
Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu