โค้ดยิม/หลักสูตรจาวา/โมดูล 3/การตั้งค่าสภาพแวดล้อมการทดสอบใน JUnit

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

ระดับ, บทเรียน
มีอยู่

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
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ