JUnit Hướng dẫn chú thích với ví dụ: @Test và @After là gì
⚡ Tóm tắt thông minh
JUnit Chú thích là một dạng siêu dữ liệu cú pháp được thêm vào. Java mã nguồn để trình chạy thử nghiệm biết cần thực thi những phương thức nào, khi nào chạy chúng và mỗi phương thức có thể mất bao lâu.
Là gì JUnit Chú thích?
JUnit chú thích là một dạng siêu dữ liệu cú pháp đặc biệt có thể được thêm vào Java mã nguồn để có khả năng đọc và cấu trúc mã tốt hơn. Các biến, tham số, gói, phương thức và lớp có thể được chú thích. Các chú thích đã được giới thiệu trong JUnit 4, điều này làm cho Java Mã nguồn dễ đọc và đơn giản hơn. Đây là sự khác biệt lớn giữa... JUnit 3 và JUnit 4: JUnit 4 là dựa trên chú thích.
Với kiến thức cơ bản về các chú thích này, người ta có thể dễ dàng học và triển khai một hệ thống. JUnit Bài kiểm tra. Dưới đây là quan trọng và được sử dụng thường xuyên JUnit danh sách chú thích, với JUnit 5 (Sao Mộc) tương đương bên cạnh mỗi mục:
| S.No. | Chú thích | Mô tả Chi tiết | JUnit 5 tương đương |
|---|---|---|---|
| 1. | @Thử nghiệm | Chú thích này thay thế cho junit.framework.TestCase và cho biết rằng phương thức công khai void được gắn kèm có thể được thực thi như một trường hợp kiểm thử. | @Test (org.junit.jupiter.api) |
| 2. | @Trước | Chú thích này được sử dụng nếu bạn muốn thực thi một số câu lệnh như điều kiện tiên quyết trước mỗi trường hợp kiểm thử. | @TrướcMỗi |
| 3. | @BeforeClass | Chú thích này được sử dụng nếu bạn muốn thực thi một số câu lệnh trước tất cả các trường hợp kiểm thử, ví dụ như một kết nối kiểm thử cần được mở trước tất cả các trường hợp kiểm thử. | @TrướcTất cả |
| 4. | @Sau đó | Chú thích này có thể được sử dụng nếu bạn muốn thực thi một số câu lệnh sau mỗi câu lệnh. Trường hợp thử nghiệmVí dụ như đặt lại các biến hoặc xóa các tập tin tạm thời. | @SauMỗi |
| 5. | @Sau giờ học | Chú thích này có thể được sử dụng nếu bạn muốn thực thi một số câu lệnh sau khi tất cả các trường hợp kiểm thử đã được hoàn thành, ví dụ như giải phóng tài nguyên sau khi thực thi tất cả các trường hợp kiểm thử. | @SauTất cả |
| 6. | @Phớt lờ | Chú thích này có thể được sử dụng nếu bạn muốn bỏ qua một số câu lệnh trong quá trình thực thi kiểm thử, ví dụ như vô hiệu hóa một số trường hợp kiểm thử trong quá trình thực thi. | @Tàn tật |
| 7. | @Test(thời gian chờ=500) | Chú thích này có thể được sử dụng nếu bạn muốn đặt thời gian chờ trong quá trình thực thi kiểm thử, ví dụ như khi bạn đang làm việc theo thỏa thuận mức độ dịch vụ (SLA) và các bài kiểm thử cần được hoàn thành trong một khoảng thời gian nhất định. | @Timeout hoặc assertTimeout |
| 8. | @Test(expected=IllegalArgumentException.class) | Chú thích này có thể được sử dụng nếu bạn muốn xử lý một số ngoại lệ trong quá trình thực thi kiểm thử. Ví dụ, nếu bạn muốn kiểm tra xem một phương thức cụ thể có ném ra một ngoại lệ được chỉ định hay không. | assertThrows |
JUnit Ví dụ về chú thích
Hãy tạo một lớp bao gồm quan trọng JUnit chú thích bằng các câu lệnh in đơn giản và thực thi nó bằng lớp chạy thử:
Bước 1) Hãy xem xét những điều dưới đây. Java Lớp này có nhiều phương thức được gắn với các chú thích đã liệt kê ở trên:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Bước 2) Hãy tạo một lớp chạy thử nghiệm để thực thi bài kiểm tra trên:
TestRunner.java
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(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Kết quả mong đợi
- Tất cả các trường hợp kiểm thử sẽ được thực thi lần lượt từng cái một, và tất cả các câu lệnh in ra đều có thể được xem trên bảng điều khiển.
- Như đã thảo luận trong bảng trên, @Before và @BeforeClass trong JUnit [ Các phương thức m2() và m1() ] sẽ được thực thi trước mỗi trường hợp kiểm thử và trước tất cả các trường hợp kiểm thử tương ứng.
- Tương tự như vậy, @After và @AfterClass trong JUnit (Các phương thức m4() và m3()) sẽ được thực thi sau mỗi trường hợp kiểm thử và sau tất cả các trường hợp kiểm thử tương ứng. @Ignore (phương thức m6()) sẽ được coi là bỏ qua bài kiểm thử.
Hãy cùng phân tích các trường hợp kiểm thử được sử dụng ở trên. Java lớp một cách chi tiết:
- Hãy xem xét phương thức m5() như được đưa ra bên dưới:
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
Trong phương pháp trên, khi bạn thêm một chuỗi vào biến “list”:
- Danh sách trống() sẽ trả về sai.
- khẳng địnhFalse(list.isEmpty()) phải trả về true.
- Kết quả là ca kiểm thử sẽ vượt qua.
Vì bạn chỉ thêm một chuỗi vào danh sách, nên kích thước của danh sách là một.
- danh sách.size() Phải trả về giá trị số nguyên “1”.
- So khẳng địnhEquals(1, list.size()) phải trả về true.
- Kết quả là ca kiểm thử sẽ vượt qua.
- Hãy xem xét phương thức m7() như được đưa ra bên dưới:
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Như đã thảo luận ở trên, @Test(thời gian chờ = 10) Tham số này được sử dụng để thiết lập thời gian chờ trong trường hợp kiểm thử. Giá trị được tính bằng mili giây, vì vậy hàm m7() phải hoàn thành trong vòng 10 ms.
- Hãy xem xét phương thức m8() như được đưa ra bên dưới:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Như đã thảo luận ở trên, @Test(dự kiến) Phương thức m8() sẽ kiểm tra ngoại lệ được chỉ định trong quá trình thực thi, do đó nó sẽ ném ra ngoại lệ “No Such Method Exception”. Kết quả là, bài kiểm tra sẽ được thực thi với một ngoại lệ.
Lưu ý về độ chính xác: Hàm m8() chỉ in ra một dòng, vì vậy ngoại lệ đã khai báo thực tế không bao giờ được ném ra. JUnit 4 báo cáo bài kiểm tra thất bại. Hãy điều chỉnh kiểu dữ liệu mong đợi sao cho phù hợp với kiểu dữ liệu mà phương thức thực sự trả về. JUnit 5 viết điều này với assertThrows.
Vì tất cả các trường hợp kiểm thử đều được thông qua, điều này dẫn đến việc thực hiện kiểm thử thành công.
Kết quả thực tế
Vì ví dụ trên có ba trường hợp kiểm thử, nên tất cả các trường hợp kiểm thử sẽ được thực thi lần lượt. Xem ảnh chụp màn hình giao diện dòng lệnh bên dưới:

Xem các câu lệnh in bên dưới có thể nhìn thấy trên bảng điều khiển:
Sử dụng @BeforeClass , được thực thi trước tất cả các trường hợp thử nghiệm
Sử dụng chú thích @Before, được thực thi trước mỗi trường hợp kiểm thử
Sử dụng @After, được thực thi sau mỗi trường hợp kiểm thử
Sử dụng chú thích @Before, được thực thi trước mỗi trường hợp kiểm thử
Sử dụng @Test(timeout), nó có thể được sử dụng để thực thi thời gian chờ trong JUnit4 trường hợp thử nghiệm
Sử dụng @After, được thực thi sau mỗi trường hợp kiểm thử
Sử dụng chú thích @Before, được thực thi trước mỗi trường hợp kiểm thử
Sử dụng @Test(expected) , nó sẽ kiểm tra ngoại lệ được chỉ định trong quá trình thực thi
Sử dụng @After, được thực thi sau mỗi trường hợp kiểm thử
Sử dụng @AfterClass, được thực thi sau tất cả các trường hợp thử nghiệm
JUnit Khẳng định lớp
Các chú thích quyết định khi nào một phương thức được thực thi; các phương thức khẳng định quyết định liệu nó có thành công hay không.
Lớp này cung cấp một loạt các phương thức khẳng định hữu ích trong việc viết trường hợp kiểm thử. Nếu tất cả các câu lệnh khẳng định đều được thông qua, kết quả kiểm thử sẽ thành công. Nếu bất kỳ câu lệnh khẳng định nào thất bại, kết quả kiểm thử sẽ thất bại. Lớp chuyên dụng này cung cấp một loạt các phương thức khẳng định hữu ích trong việc viết trường hợp kiểm thử. Nếu tất cả các câu lệnh khẳng định đều được thông qua, kết quả kiểm thử sẽ thành công. Nếu bất kỳ câu lệnh khẳng định nào thất bại, kết quả kiểm thử sẽ thất bại. JUnit khẳng định Bài hướng dẫn này sẽ trình bày chi tiết từng phương pháp.
Như bạn đã thấy ở phần trước, bảng dưới đây mô tả các phương thức Assert quan trọng và phần giải thích của chúng:
| S.No. | Phương pháp | Mô tả Chi tiết |
|---|---|---|
| 1. | void khẳng địnhEquals(boolean dự kiến, boolean thực tế) | Nó kiểm tra xem hai giá trị có bằng nhau hay không, tương tự như phương thức `equals` của lớp `Object`. |
| 2. | void khẳng địnhFalse(điều kiện boolean) | Chức năng là kiểm tra xem một điều kiện có sai hay không. |
| 3. | void khẳng địnhNotNull(Đối tượng đối tượng) | Chức năng “assertNotNull” là để kiểm tra xem một đối tượng có phải là null hay không. |
| 4. | void khẳng địnhNull(Đối tượng đối tượng) | Chức năng “assertNull” là kiểm tra xem một đối tượng có rỗng hay không. |
| 5. | void khẳng địnhTrue(điều kiện boolean) | Chức năng “assertTrue” là để kiểm tra xem điều kiện có đúng hay không. |
| 6. | vô hiệu thất bại() | Nếu bạn muốn ném ra lỗi khẳng định, hàm fail() luôn trả về kết quả thất bại. |
| 7. | void khẳng địnhSame([Thông báo chuỗi] | Chức năng “assertSame” là để kiểm tra xem hai đối tượng có tham chiếu đến cùng một đối tượng hay không. |
| 8. | void khẳng địnhNotSame([Thông báo chuỗi] | Chức năng “assertNotSame” là để kiểm tra xem hai đối tượng không tham chiếu đến cùng một đối tượng. |
JUnit Lớp trường hợp thử nghiệm
Để chạy nhiều bài kiểm tra, lớp TestCase có sẵn trong... junit.framework gói. Chú thích @Test cho biết JUnit Điều đó có nghĩa là phương thức công khai vô hiệu này (một trường hợp thử nghiệm ở đây) mà nó được gắn vào có thể được chạy như một trường hợp thử nghiệm.
Ghi chú phiên bản: Trường hợp thử nghiệm, Kết quả kiểm tra và TestSuite thuộc về di sản junit.framework gói từ JUnit 3. Chúng vẫn được đóng gói bên trong artifact junit 4.x, nhưng các bài kiểm tra dựa trên chú thích không kế thừa TestCase.
Bảng dưới đây trình bày một số phương pháp quan trọng hiện có. junit.framework.TestCase lớp học:
| S.No. | Phương pháp | Mô tả Chi tiết |
|---|---|---|
| 1. | int countTestCase() | Phương pháp này được sử dụng để đếm số lượng trường hợp kiểm thử được thực thi bởi hệ thống. run(TestResult tr) phương pháp. |
| 2. | TestResult createResult() | Phương pháp này được sử dụng để tạo ra một Kết quả kiểm tra vật. |
| 3. | Chuỗi getName() | Phương thức này trả về một chuỗi không có gì khác ngoài một Trường hợp thử nghiệm tên. |
| 4. | Chạy TestResult() | Phương pháp này được sử dụng để thực hiện một bài kiểm tra, bài kiểm tra này sẽ trả về một giá trị. Kết quả kiểm tra vật. |
| 5. | void run(kết quả TestResult) | Phương pháp này được sử dụng để thực hiện một bài kiểm tra có Kết quả kiểm tra đối tượng không trả về bất cứ thứ gì. |
| 6. | void setName(Tên chuỗi) | Phương pháp này được sử dụng để đặt tên cho một TestCase. |
| 7. | void setUp() | Phương pháp này được sử dụng để viết mã liên kết tài nguyên, ví dụ như tạo kết nối cơ sở dữ liệu. |
| 8. | void TearsDown() | Phương pháp này được sử dụng để viết mã giải phóng tài nguyên, ví dụ như giải phóng kết nối cơ sở dữ liệu sau khi thực hiện một thao tác giao dịch. |
JUnit Lớp kết quả kiểm tra
Khi bạn thực hiện một bài kiểm tra, nó sẽ trả về kết quả (dưới dạng một giá trị nào đó). Kết quả kiểm tra (đối tượng). Đối tượng TestResult này có thể được sử dụng để phân tích đối tượng kết quả. Kết quả kiểm thử này có thể là thất bại hoặc thành công.
Xem bảng bên dưới để biết các phương thức quan trọng được sử dụng trong lớp junit.framework.TestResult:
| S.No. | Phương pháp | Mô tả Chi tiết |
|---|---|---|
| 1. | void addError(Kiểm tra thử nghiệm, Có thể ném được) | Phương pháp này được sử dụng nếu bạn cần thêm lỗi vào bài kiểm tra. |
| 2. | void addFailure(Kiểm tra thử, AssertionFailedError t) | Phương pháp này được sử dụng nếu bạn cần thêm một lỗi vào danh sách các lỗi. |
| 3. | void endTest(Kiểm tra thử nghiệm) | Phương pháp này được sử dụng để thông báo rằng một bài kiểm tra đã được thực hiện (hoàn thành). |
| 4. | lỗi intCount() | Phương pháp này được sử dụng để lấy các lỗi được phát hiện trong quá trình thực thi kiểm thử. |
| 5. | liệt kê lỗi() | Phương pháp này chỉ đơn giản trả về một tập hợp (ở đây là một kiểu liệt kê) các lỗi. |
| 6. | int failedCount() | Phương pháp này được sử dụng để đếm số lỗi được phát hiện trong quá trình thực thi kiểm thử. |
| 7. | chạy void (kiểm tra TestCase) | Phương pháp này được sử dụng để thực hiện một trường hợp thử nghiệm. |
| 8. | int runCount() | Phương pháp này chỉ đơn giản là đếm số lượng bài kiểm tra đã được thực thi. |
| 9. | void startTest(Kiểm tra thử nghiệm) | Phương pháp này được sử dụng để thông báo rằng một bài kiểm tra đã được bắt đầu. |
| 10. | vô hiệu dừng() | Phương pháp này được sử dụng để dừng quá trình chạy thử nghiệm. |
JUnit Lớp bộ thử nghiệm
Nếu bạn muốn thực hiện nhiều bài kiểm tra theo một thứ tự cụ thể, bạn có thể làm điều đó bằng cách 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ử, và... JUnit bộ thử nghiệm Bài hướng dẫn này sẽ trình bày chi tiết một ví dụ đầy đủ.
Xem bảng bên dưới để biết các phương pháp quan trọng được sử dụng trong... junit.framework.TestSuite lớp học:
| S.No. | Phương pháp | Mô tả Chi tiết |
|---|---|---|
| 1. | void addTest(Kiểm tra thử) | Phương pháp này được sử dụng nếu bạn muốn thêm một bài kiểm tra vào bộ phần mềm. |
| 2. | void addTestSuite(Lớp lớp kiểm tra) | Phương thức này được sử dụng nếu bạn muốn chỉ định lớp trong khi thêm bài kiểm tra vào bộ. |
| 3. | int countTestCase() | Phương pháp này được sử dụng nếu bạn muốn đếm số lượng trường hợp thử nghiệm. |
| 4. | Chuỗi getName() | Phương pháp này được sử dụng để lấy tên của bộ thử nghiệm. |
| 5. | void run(kết quả TestResult) | Phương pháp này được sử dụng để thực hiện một bài kiểm tra và thu thập kết quả kiểm tra. Kết quả kiểm tra vật. |
| 6. | void setName(Tên chuỗi) | Phương pháp này được sử dụng để đặt tên cho TestSuite. |
| 7. | Kiểm tra testAt(int chỉ số) | Phương pháp này được sử dụng nếu bạn muốn trả về kết quả kiểm thử tại một chỉ mục nhất định. |
| 8. | int testCount() | Phương pháp này được sử dụng nếu bạn muốn trả về số lượng bài kiểm tra trong bộ kiểm tra. |
| 9. | Cảnh báo kiểm tra tĩnh (Thông báo chuỗi) | Phương pháp này trả về một bài kiểm tra sẽ thất bại và ghi lại một thông báo cảnh báo. |
