JUnit Các trường hợp thử nghiệm @Before @BeforeClass Chú thích

⚡ Tóm tắt thông minh

JUnit là khung kiểm thử đơn vị được sử dụng rộng rãi nhất cho JavaVà các chú thích về cấu hình kiểm thử của nó kiểm soát chính xác những gì xảy ra trước và sau khi mỗi phương thức kiểm thử chạy bên trong một lớp kiểm thử.

  • 🔘 Vật cố định: Môi trường kiểm thử (test fixture) là ngữ cảnh cố định gồm các đối tượng và tài nguyên mà một trường hợp kiểm thử được chạy trong đó.
  • ☑️ Thành lập: @Before chạy trước mọi phương thức kiểm thử, trong khi @BeforeClass chạy một lần trước toàn bộ lớp.
  • Phá bỏ: @After được thực thi sau mỗi lần kiểm thử, ngay cả khi kiểm thử báo lỗi hoặc khẳng định thất bại.
  • 🧪 Gọi món: Phương thức @Before của lớp cha được thực thi trước, sau đó đến phương thức @Before của lớp con, tiếp theo là @Test, và cuối cùng là mỗi phương thức @After.
  • 🛠️ Runner: JUnitCore.runClasses() thực thi các lớp kiểm thử và trả về một đối tượng Result chứa mọi lỗi.
  • 📊 JUnit 5: @Before, @After, @BeforeClass và @AfterClass trở thành @BeforeEach, @AfterEach, @BeforeAll và @AfterAll.

JUnit Kiểm thử với các chú thích @Before và @BeforeClass

JUnit là đơn vị phổ biến nhất Kiểm tra khuôn khổ trong Java. Nó được khuyến khích rõ ràng cho Kiểm tra đơn vị. JUnit Việc kiểm thử ứng dụng web không yêu cầu máy chủ, giúp quá trình kiểm thử diễn ra nhanh chóng.

JUnit framework cũng cho phép tạo các trường hợp thử nghiệm và dữ liệu thử nghiệm nhanh chóng và dễ dàng. Các org.junit Gói này bao gồm nhiều giao diện và lớp cho JUnit Kiểm thử, chẳng hạn như Test, Assert, After và Before. Phạm vi rộng hơn JUnit Gia đình được xây dựng trên cùng những nền tảng đó.

Thiết bị thử nghiệm là gì?

Trước khi hiểu test fixture là gì, chúng ta hãy cùng nghiên cứu đoạn mã bên dưới.

Mã này được thiết kế để thực hiện hai trường hợp thử nghiệm trên một tệp đơn giản.

public class OutputFileTest {
    private File output; 
    output = new File(...);
    output.delete(); 
public void testFile1(){
        //Code to verify Test Case 1
}
    output.delete();
    output = new File(...);
public void testFile2(){
        //Code to verify Test Case 2
}
 output.delete(); 
}

Có vài vấn đề ở đây

  • Mã nguồn không thể đọc được.
  • Mã này không dễ bảo trì.
  • Khi bộ kiểm thử phức tạp, mã có thể chứa các vấn đề về logic.

So sánh cùng một mã bằng cách sử dụng JUnit.

public class OutputFileTest		
{
    private File output; 
    @Before public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

Mã nguồn dễ đọc và dễ bảo trì hơn nhiều. Cấu trúc mã nguồn ở trên là một ví dụ. đồ gá thử nghiệm.

Một thiết bị kiểm thử là một bối cảnh trong đó một JUnit Trường hợp thử nghiệm chạy. Thông thường, đồ đạc thử nghiệm bao gồm:

  • Các đối tượng hoặc tài nguyên có sẵn cho bất kỳ trường hợp thử nghiệm nào.
  • Các hoạt động cần thiết để làm cho các vật thể và nguồn lực này có sẵn.
  • Những hoạt động này là
    1. phân bổ (thiết lập)
    2. hủy phân bổ (phá bỏ).

Thiết lập và phá bỏ

Trang thiết bị rất quan trọng vì JUnit Các đoạn mã này được chạy xung quanh mọi bài kiểm tra.

  • Thông thường, có một số nhiệm vụ lặp đi lặp lại phải được thực hiện trước mỗi trường hợp kiểm thử. Ví dụ: tạo kết nối cơ sở dữ liệu.
  • Tương tự như vậy, vào cuối mỗi trường hợp thử nghiệm, có thể có một số nhiệm vụ được lặp lại. Ví dụ: để dọn dẹp sau khi quá trình thực hiện kiểm tra kết thúc.
  • JUnit Cung cấp các chú thích giúp thiết lập và gỡ bỏ. Nó đảm bảo rằng các tài nguyên được giải phóng và hệ thống kiểm thử ở trạng thái sẵn sàng cho trường hợp kiểm thử tiếp theo.

Kia là JUnit Các chú thích sẽ được thảo luận bên dưới.

Thành lập

@Trước chú thích trong JUnit được sử dụng trên một phương thức có chứa Java Đoạn mã này được dùng để chạy trước mỗi trường hợp kiểm thử, tức là nó chạy trước mỗi lần thực thi kiểm thử.

Teardown (bất kể phán quyết)

@Sau đó chú thích được sử dụng trên một phương thức có chứa Java mã để chạy sau mỗi trường hợp thử nghiệm. Các phương thức này sẽ chạy ngay cả khi có bất kỳ ngoại lệ nào được đưa ra trong trường hợp thử nghiệm hoặc trong trường hợp xác nhận không thành công.

Lưu ý:

  • Nó được phép có bất kỳ số lượng chú thích nào được liệt kê ở trên.
  • Tất cả các phương pháp được chú thích bằng @Trước in JUnit sẽ chạy trước mỗi test case, nhưng chúng có thể chạy theo bất kỳ thứ tự nào.
  • Bạn có thể kế thừa các phương thức @Before và @After từ lớp cha. Quá trình thực thi như sau, và đó là một quy trình thực thi chuẩn trong... JUnit.
  1. Thực hiện JUnit @Before các phương thức trong siêu lớp
  2. Thực thi các phương thức @Before trong lớp này
  3. Thực thi phương thức @Test trong lớp này
  4. Thực thi các phương thức @After trong lớp này
  5. Thực thi các phương thức @After trong siêu lớp

JUnit Ghi chú năm 5: những chú thích này là JUnit 4 (org.junit). JUnit 5 đã đổi tên chúng thành org.junit.jupiter.api, và JUnit Đoạn mã số 4 bên dưới vẫn hoạt động với động cơ cổ điển.

JUnit Chú thích năm 4 JUnit Tương đương 5 (Sao Mộc) Chạy
@Trước @TrướcMỗi Trước mỗi phương pháp thử nghiệm
@Sau đó @SauMỗi Sau mỗi phương pháp thử nghiệm
@BeforeClass @TrướcTất cả Trước toàn thể lớp học một lần.
@Sau giờ học @SauTất cả Sau khi cả lớp đã học xong.
@Phớt lờ @Tàn tật Bỏ qua bài kiểm tra có chú thích

Ví dụ: Tạo một lớp với tệp làm dữ liệu kiểm thử.

public class OutputFileTest		
{
    private File output; 
    @Before	public void createOutputFile() 
    { 
       output = new File(...);
    }
  
	@After public void deleteOutputFile() 
    {
        output.delete(); 
    } 
     
    @Test public void testFile1() 
    {
       // code for test case objective
    } 
	@Test public void testFile2() 
    {
       // code for test case objective
    }
}

Trong ví dụ trên, chuỗi thực thi sẽ diễn ra như sau. Sơ đồ tracMỗi phương thức kiểm thử trải qua một chu kỳ tạo-kiểm thử-xóa.

JUnit Chuỗi thực thi @Before và @After xoay quanh hai phương thức kiểm thử.

  1. createOutputFile()
  2. testFile1()
  3. xóaOutputFile()
  4. createOutputFile()
  5. testFile2()
  6. xóaOutputFile()

Giả thiết:

Hàm testFile1() chạy trước hàm testFile2(), điều này không được đảm bảo.

Thiết lập một lần duy nhất

  • Có thể chạy một phương thức chỉ một lần cho toàn bộ lớp kiểm thử trước khi bất kỳ kiểm thử nào được thực hiện và trước bất kỳ kiểm thử nào. @Trước (các) phương pháp.
  • Việc "thiết lập một lần duy nhất" rất hữu ích cho việc khởi động máy chủ, thiết lập kết nối và các công việc tương tự. Việc đóng và mở lại tài nguyên cho mỗi lần thử nghiệm sẽ tốn nhiều thời gian.
  • Điều này có thể được thực hiện bằng cách sử dụng chú thích @BeforeClass in JUnit.
@BeforeClass public static void Method_Name() {	
    // class setup code here	
 }	

Phương pháp phải là khoảng trống tĩnh công cộng, bởi vì JUnit hàm này được gọi trước khi bất kỳ thể hiện kiểm thử nào tồn tại.

Phá bỏ một lần duy nhất

  • Tương tự như thiết lập chỉ một lần, phương pháp dọn dẹp chỉ một lần cũng có sẵn. Phương pháp này chạy sau khi tất cả các phương thức kiểm thử và @Sau đó chú thích đã được thực hiện.
  • Nó hữu ích để dừng lại.ping máy chủ và đóng các liên kết liên lạc.
  • Điều này có thể được thực hiện bằng cách sử dụng @Sau giờ học chú thích.
 @AfterClass public static void Method_Name()	
 {	
    // class cleanup code here	
 }	

JUnit Bộ thử nghiệm

Khi đã có lịch trình cụ thể, các lớp thử nghiệm liên quan thường được nhóm lại và tiến hành cùng nhau.

Nếu muốn thực hiện nhiều bài kiểm tra theo một thứ tự cụ thể, chúng ta có thể kết hợp tất cả các bài kiểm tra vào một nơi. Nơi này được gọi là bộ kiểm thử. Thông tin chi tiết hơn về cách thực hiện bộ kiểm thử và cách sử dụng chúng sẽ được trình bày trong phần tiếp theo. JUnit được đề cập trong phần này hướng dẫn.

JUnit Người chạy thử

JUnit cung cấp một công cụ để thực hiện các trường hợp thử nghiệm của bạn.

  • JUnitTrung tâm lớp được sử dụng để thực hiện các thử nghiệm này.
  • Một phương pháp được gọi là lớp học chạy được cung cấp bởi org.junit.runner.JUnitTrung tâm được sử dụng để chạy một hoặc một số lớp kiểm tra.
  • Kiểu trả về của phương thức này là Kết quả vật (org.junit.runner.Kết quả), được sử dụng để truy cập thông tin về các bài kiểm tra. Xem ví dụ mã sau để hiểu rõ hơn.
public class Test {				
			public static void main(String[] args) {									
       		Result result = JUnitCore.runClasses(CreateAndSetName.class);					
			for (Failure failure : result.getFailures()) {							
         		System.out.println(failure.toString());					
      }		
      System.out.println(result.wasSuccessful());					
   }		
}      

Trong đoạn mã trên, đối tượng “result” được xử lý để thu được kết quả thất bại và thành công của các trường hợp kiểm thử mà chúng ta đang thực thi. Các hàm hỗ trợ như... khẳng định nêu bật những thất bại đó, trong khi @Phớt lờ Bỏ qua một bài kiểm tra.

JUnit Ghi chú năm 5: JUnitTrung tâm là JUnit Người chạy số 4. JUnit 5 thay thế nó bằng JUnit Nền tảng Launcher API, thường được khởi chạy bởi IDE, Gradle hoặc Maven Surefire.

Tên JUnit chương trình

Kiến thức khá tốt về SDLC, Java lập trình và những kiến ​​thức cơ bản về... kiểm thử phần mềm quá trình này giúp hiểu rõ hơn về JUnit chương trình, cũng như việc biết cách kiểm tra đơn vị Khác với các bài kiểm tra tích hợp.

Hãy cùng tìm hiểu về kiểm thử đơn vị bằng một ví dụ thực tế. Chúng ta cần tạo một lớp kiểm thử với một phương thức kiểm thử được chú thích bằng `@Test`. @Thử nghiệm như được đưa ra dưới đây:

MyFirstClassTest.java

package guru99.JUnit;		

import static org.junit.Assert.*;				

import org.junit.Test;		

public class MyFirstClassTest {				

    @Test		
    public void myFirstMethod(){					
        String str= "JUnit is working fine";					
        assertEquals("JUnit is working fine",str);					
    }
}		

TestRunner.java

Để thực thi phương thức kiểm thử của chúng ta (ở trên), chúng ta cần tạo một trình chạy kiểm thử. Trong trình chạy kiểm thử, chúng ta phải thêm lớp kiểm thử làm tham số trong JUnitPhương thức runClasses() của Core. Phương thức này sẽ trả về kết quả kiểm tra, dựa trên việc bài kiểm tra thành công hay thất bại.

Để biết thêm chi tiết về vấn đề này, vui lòng xem đoạn mã bên dưới:

package guru99.JUnit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
            Result result = JUnitCore.runClasses(MyFirstClassTest.class);					
			for (Failure failure : result.getFailures()) {							
              System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      	

Đầu ra

Một khi TestRunner.java Khi thực thi các phương thức kiểm thử, chúng ta nhận được kết quả là thất bại hoặc thành công. Vui lòng xem giải thích kết quả bên dưới:

  1. Trong ví dụ này, sau khi thực hiện MyFirstClassTest.javaBài kiểm tra đã thành công và kết quả hiển thị màu xanh lá cây.
  2. Nếu nó bị lỗi, kết quả sẽ hiển thị màu đỏ, và lỗi đó có thể được quan sát thấy trong quá trình báo lỗi. trace. Xem JUnit Giao diện người dùng bên dưới:

Eclipse JUnit Hình ảnh hiển thị thanh màu xanh lá cây báo đạt điểm cho bài kiểm tra MyFirstClassTest.

Câu Hỏi Thường Gặp

JUnit Việc này tạo ra một thể hiện mới của lớp kiểm thử cho mỗi phương thức kiểm thử, do đó không có thể hiện nào tồn tại khi mã cấp lớp cần chạy. Khai báo phương thức là static cho phép JUnit gọi nó trực tiếp.

Không. Thứ tự phương pháp được cố ý không xác định. JUnit 4 ưu đãi @FixMethodOrder và JUnit 5 cung cấp @TestMethodOrder, nhưng tùy thuộc vào thứ tự, tín hiệu được ghép nối để kiểm tra.

Phương thức kiểm thử không bao giờ được gọi và được báo cáo là lỗi, chứ không phải là thất bại. Bất kỳ phương thức @After nào vẫn chạy, vì vậy quá trình dọn dẹp phải chấp nhận một fixture được xây dựng chưa hoàn chỉnh.

Các dự án mới nên bổ sung thêm JUnit 5 thành phần tổng hợp org.junit.jupiter:junit-jupiter. Các nhóm đang nắm giữ phiên bản cũ. JUnit 4 bộ phần mềm bổ sung junit-vintage-engine để cả hai đều chạy trên cùng một nền tảng.

Fixture là toàn bộ bối cảnh được chuẩn bị sẵn xung quanh một bài kiểm tra, bao gồm các tệp hoặc kết nối thực. Mock là một cộng tác viên thay thế với hành vi được lập trình sẵn, thường được tạo ra bởi fixture.

Vâng, thông qua @BeforeClass JUnit 4 hoặc @BeforeAll trong JUnit 5. Các fixture dùng chung nhanh hơn nhưng lại rò rỉ trạng thái, vì vậy hãy dành chúng cho các tài nguyên chỉ đọc đắt tiền.

Các trợ lý AI đọc một lớp, suy luận ra các cộng tác viên cần thiết và soạn thảo thiết lập @Before với phần dọn dẹp @After tương ứng. Luôn luôn tự mình xem lại các khẳng định được tạo ra.

Trợ lý GitHub Công cụ này tạo khung sườn cho một lớp kiểm thử từ chữ ký phương thức, bao gồm cả các chú thích vòng đời. Nó thường mặc định là... JUnit Có 4 mặt hàng nhập khẩu, vì vậy hãy xác nhận gói hàng phù hợp với động cơ của bạn.

Tóm tắt bài viết này với: