CodeGym /หลักสูตร /All lectures for TH purposes /การตั้งค่าสภาพแวดล้อมการทดสอบใน JUnit

การตั้งค่าสภาพแวดล้อมการทดสอบใน JUnit

All lectures for TH purposes
ระดับ , บทเรียน
มีอยู่

3.1 คำอธิบายประกอบ @BeforeEach, @AfterEach

โปรดทราบว่าในตัวอย่างที่แล้ว ในแต่ละเมธอด เราต้องเขียนโค้ดเพื่อสร้างวัตถุเครื่องคิดเลข.

แน่นอนว่านี่เป็นเพียงบรรทัดเดียว แต่ถ้าเราทดสอบระบบจริง เรามักจะเจอสถานการณ์ที่เราต้องสร้างและกำหนดค่าหลายอ็อบเจกต์ ซึ่งอาจต้องใช้โค้ดหลายโหล ตัวอย่าง:

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

ในตัวอย่างข้างต้น เราได้สร้างและกำหนดค่าวัตถุHttpไคลเอนต์และต้องการทดสอบ เมธอด send( )

เพื่อให้แต่ละครั้งในวิธีการทดสอบจะไม่เขียนการสร้างวัตถุHttpไคลเอนต์มันสามารถย้ายไปยังวิธีการที่แยกต่างหากและได้รับคำ อธิบายประกอบ @BeforeEachพิเศษ จากนั้น Junit จะเรียกวิธีนี้ก่อนการทดสอบแต่ละวิธี ตัวอย่าง:

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

คุณยังสามารถสร้างเมธอดพิเศษที่จะถูกเรียกทุกครั้งหลังจากเมธอดทดสอบถัดไป และล้างรีซอร์สที่ใช้เขียนบางอย่างลงในบันทึก เป็นต้น เมธอดดังกล่าวต้องทำเครื่องหมายด้วย@AfterEach คำอธิบาย ประกอบ

หากคุณมี 3 วิธีทดสอบtest1() , test2()และtest3()ลำดับการโทรจะเป็น:

  • ก่อนแต่ละวิธี
  • ทดสอบ 1()
  • AfterEach วิธี
  • ก่อนแต่ละวิธี
  • ทดสอบ 2()
  • AfterEach วิธี
  • ก่อนแต่ละวิธี
  • ทดสอบ 3 ()
  • AfterEach วิธี

3.2 คำอธิบายประกอบ @BeforeAll, @AfterAll

JUnit ยังให้คุณเพิ่มเมธอดที่จะถูกเรียกใช้ก่อนเมธอดทดสอบทั้งหมด วิธีการดังกล่าวควรใส่คำอธิบายประกอบด้วย@BeforeAll นอกจากนี้ยังมี คำอธิบาย ประกอบ@AfterAll ที่จับคู่ เมธอดที่ทำเครื่องหมายไว้จะถูกเรียกใช้โดย JUnit หลังจากเมธอดทดสอบทั้งหมด

ลองเขียนตัวอย่างพิเศษที่ช่วยให้คุณเข้าใจวิธีการทำงานทั้งหมดได้ดีขึ้น ลองทดสอบเครื่องคิดเลขของเราเป็นพื้นฐาน:

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

การทดสอบนี้จะพิมพ์ข้อความต่อไปนี้ไปยังคอนโซล:


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
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION