CodeGym/Kursus Java/Modul 3/Menyediakan persekitaran ujian dalam JUnit

Menyediakan persekitaran ujian dalam JUnit

Tahap, pelajaran
Tersedia

3.1 Anotasi @BeforeEach, @AfterEach

Perhatikan bahawa dalam contoh sebelumnya, dalam setiap kaedah kita perlu menulis kod untuk mencipta objekkalkulator.

Sudah tentu, ini hanya satu baris, tetapi jika kita menguji sistem sebenar, kita selalunya akan menghadapi situasi di mana kita perlu mencipta dan mengkonfigurasi beberapa objek, yang boleh mengambil beberapa dozen baris kod. Contoh:

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

Dalam contoh di atas, kami telah mencipta dan mengkonfigurasi objekHttpClientdan ingin menguji kaedah send() .

Supaya setiap kali dalam kaedah ujian untuk tidak menulis penciptaan objekHttpClient, ia boleh dialihkan ke kaedah yang berasingan dan diberi anotasi @BeforeEach khas . Kemudian Junit akan memanggil kaedah ini sebelum setiap kaedah ujian. Contoh:

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

Anda juga boleh mencipta kaedah khas yang akan dipanggil setiap kali selepas kaedah ujian seterusnya, dan bersihkan sumber yang digunakan , tulis sesuatu pada log, dsb. Kaedah sedemikian mesti ditandakan dengan anotasi @AfterEach .

Jika anda mempunyai 3 kaedah ujian test1() , test2() dan test3() , maka pesanan panggilan ialah:

  • sebelumSetiap kaedah
  • ujian1()
  • SelepasSetiap kaedah
  • sebelumSetiap kaedah
  • ujian2()
  • SelepasSetiap kaedah
  • sebelumSetiap kaedah
  • ujian3()
  • SelepasSetiap kaedah

3.2 Anotasi @BeforeAll, @AfterAll

JUnit juga membenarkan anda menambah kaedah yang akan dipanggil sekali sebelum semua kaedah ujian . Kaedah sedemikian hendaklah dianotasi dengan @BeforeAll . Ia juga mempunyai anotasi @AfterAll berpasangan . Kaedah yang ditandakan dengannya akan dipanggil oleh JUnit selepas semua kaedah ujian.

Mari tulis contoh khas yang membolehkan anda memahami dengan lebih baik cara semuanya berfungsi. Mari kita ambil ujian kalkulator kami sebagai asas:

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

Ujian ini akan mencetak teks berikut ke konsol:


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
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi