Tạo JUnit Bộ thử nghiệm với ví dụ: @RunWith @SuiteClasses
⚡ Tóm tắt thông minh
JUnit Bộ kiểm thử tập hợp các trường hợp kiểm thử từ nhiều lớp khác nhau để chúng chạy cùng nhau trong một lần duy nhất, được điều khiển bởi các chú thích @RunWith(Suite.class) và @SuiteClasses và được khởi chạy thông qua một lớp chạy kiểm thử thông thường.

In JUnitBộ kiểm thử cho phép chúng ta tổng hợp tất cả. trường hợp thử nghiệm Từ nhiều lớp học khác nhau, hãy tập hợp chúng lại và chạy cùng nhau.
Để chạy bộ kiểm thử, bạn cần chú thích một lớp bằng cách sử dụng các chú thích được đề cập bên dưới:
- @RunWith(Suite.class)
- @SuiteClasses(test1.class, test2.class…) hoặc @Suite.SuiteClasses({test1.class, test2.class…})
Với các chú thích ở trên, tất cả các lớp kiểm thử trong bộ kiểm thử sẽ bắt đầu thực thi lần lượt từng lớp một. Bản thân lớp bộ kiểm thử vẫn trống: nó chỉ là nơi chứa các chú thích, và trình chạy sẽ đọc các chú thích đó để quyết định lớp nào cần thực thi.
Các bước để tạo bộ thử nghiệm và người chạy thử nghiệm
Bốn bước dưới đây xây dựng bộ kiểm thử nhỏ nhất có thể chạy được: hai lớp kiểm thử thông thường, một lớp đặt tên cho chúng và một lớp chạy (runner) khởi động bộ kiểm thử từ phương thức main.
Bước 1) Tạo một lớp kiểm thử đơn giản (ví dụ: MyFirstClassTest) và thêm một phương thức được chú thích bằng @ @Thử nghiệm.
Lớp đầu tiên chỉ chứa một phương thức kiểm thử trống duy nhất, điều này đủ để chứng minh rằng bộ kiểm thử sẽ nhận diện được nó:
Bước 2) Tạo một lớp kiểm thử khác để thêm vào (ví dụ: MySecondClassTest) và tạo một phương thức được chú thích bằng @Test.
Lớp thứ hai có hình dạng hoàn toàn giống nhau, vì vậy bộ dữ liệu này có hai lớp riêng biệt để tổng hợp:
Bước 3) Để tạo testSuite, trước tiên bạn cần chú thích lớp bằng @RunWith(Suite.class) và @SuiteClasses(class1.class, class2.class…).
Hãy lưu ý rằng lớp kiểm thử TestSuiteExample không khai báo bất kỳ phương thức kiểm thử nào của riêng nó — hai chú thích đã chứa tất cả thông tin:
Bước 4) Hãy tạo một lớp Test Runner để chạy bộ kiểm thử của chúng ta như được hướng dẫn bên dưới:
Người chạy bộ là một người bình thường. Java lớp có phương thức main truyền lớp suite cho JUnitCore:
Code Giải thích:
- Code Dòng 8: Khai báo phương thức main của lớp Test, phương thức này sẽ chạy chương trình của chúng ta. JUnit thử nghiệm.
- Code Dòng 9: Thực hiện các trường hợp thử nghiệm bằng cách sử dụng JUnitCore.runClasses nhận tên lớp kiểm thử làm tham số (Trong ví dụ trên, bạn đang sử dụng TestSuiteExample.class được hiển thị ở bước 3).
- Code Dòng 11: Xử lý kết quả bằng vòng lặp for và in ra kết quả thất bại.
- Code Dòng 13: In ra kết quả thành công.
Đầu ra: Đây là kết quả cho thấy bài kiểm tra đã thành công mà không có lỗi nào. tracnhư được nêu bên dưới:
Thanh màu xanh lá cây xác nhận mục đích của một bộ kiểm thử: một lần chạy, một lần hiển thị kết quả và cả hai lớp đều được báo cáo bên dưới nút bộ kiểm thử chứ không phải trong hai lần chạy riêng biệt.
JUnit Ví dụ về bộ thử nghiệm
Hãy xem xét một ví dụ phức tạp hơn, trong đó các lớp bên trong bộ lớp thực sự... khẳng định Thay vì giữ một phương thức rỗng, hãy sử dụng một cái gì đó khác.
JunitTest.java
JunitTest.java là một lớp đơn giản được chú thích bằng `@JunitTest.java`. @RunWith và @Thượng hạng chú thích. Bạn có thể liệt kê bất kỳ số lượng lớp nào trong bộ kiểm thử dưới dạng tham số, như được đưa ra bên dưới:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty, it is used only as a holder for the above annotations }
SuiteTest1.java
SuiteTest1.java Đây là một lớp kiểm thử có các phương thức kiểm thử in ra một thông báo, như được đưa ra bên dưới. Bạn sẽ sử dụng lớp này như một thành viên của bộ kiểm thử trong lớp đã đề cập ở trên. Nó dựa vào một lớp trợ giúp có tên là JUnitThông báo này được định nghĩa ở nơi khác trong cùng gói phần mềm và không được sao chép lại ở đây.
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.java
SuiteTest2.java là một lớp kiểm tra khác, tương tự như SuiteTest1.javaCó một phương thức kiểm thử để in ra thông báo như bên dưới. Bạn sẽ sử dụng lớp này như một thành viên của bộ kiểm thử trong... JunitTest.java.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
Đầu ra
Sau khi thực hiện Kiểm tra Junit.java, chứa một bộ phần mềm bao gồm SuiteTest1.java và SuiteTest2.javaBạn sẽ nhận được kết quả như bên dưới. Bảng điều khiển sẽ in ra các thông báo do cả hai lớp tạo ra:
JUnit view ghi lại cùng một lần chạy dưới dạng ba phương thức kiểm thử thành công được nhóm lại trong lớp suite:
Lưu ý: Các nhãn trên bảng điều khiển trong ví dụ này bị đảo ngược — chuỗi được in ra bởi SuiteTest1 có nội dung là “Suite Test 2” và chuỗi được in ra bởi SuiteTest2 có nội dung là “Suite Test 1”. Các đoạn mã gốc được sao chép nguyên vẹn, vì vậy các nhãn vẫn giữ nguyên như tác giả đã viết; hãy đọc tên lớp trong… JUnit Hãy xem hình ảnh thay vì nhãn in khi bạn so khớp đầu ra với nguồn.
Cách tạo bộ kiểm thử trong JUnit 5
JUnit Phiên bản 5 loại bỏ hoàn toàn các runner, do đó @RunWith(Suite.class) không tồn tại trong các gói org.junit.jupiter. Các suite đã được chuyển sang... JUnit Nền tảng, nơi phân phối chúng trong một thành phần riêng biệt có tên gọi là junit-platform-suite-engineThêm phần phụ thuộc đó, sau đó chú thích một lớp bằng `@Suite` và một trong các chú thích bộ chọn.
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
Các chú thích bộ chọn thay thế danh sách @SuiteClasses duy nhất bằng một nhóm nhỏ các tùy chọn:
| Chú thích | Những gì nó chọn |
| @SelectClasses | Các lớp kiểm thử riêng lẻ được đặt tên từng cái một, thay thế trực tiếp cho @SuiteClasses. |
| @SelectPackages | Tất cả các lớp kiểm thử trong gói được đặt tên và trong tất cả các gói con của nó. |
| @IncludeClassNamePatterns | Bộ lọc biểu thức chính quy được áp dụng lên trên vùng chọn. |
| @SuiteDisplayName | Tên dễ đọc hơn sẽ được hiển thị trong báo cáo thay vì tên lớp. |
Hai điểm khác biệt nữa cũng rất quan trọng trong thực tế. A JUnit Lớp suite có thể khai báo các phương thức @BeforeSuite và @AfterSuite, chạy một lần cho toàn bộ suite, và JUnit Ví dụ 4 ở trên vẫn được thực thi trên JUnit Nền tảng này sử dụng công cụ đồ họa cổ điển, vì vậy mã gốc trên trang này không cần phải viết lại để vẫn hoạt động.
Ưu điểm và hạn chế của JUnit Bộ thử nghiệm
Một dãy phòng là một nhómping cơ chế, không phải là khung kiểm tra Nó mang bản chất riêng, và điều đó định hình cả những gì nó làm tốt và những gì nó không còn hữu ích nữa.
Ưu điểm
- Một lần khởi chạy sẽ kết hợp các lớp học có liên quan với nhau, ví dụ như một bộ tạo khói hoặc một... hồi quy Quá trình thiết lập được bắt đầu bằng một lệnh duy nhất.
- Chế độ xem kết quả nhóm tất cả các lớp dưới một nút bộ kiểm thử duy nhất, giúp dễ dàng phát hiện lỗi chung hơn.
- Danh sách thành viên được lưu trữ dưới dạng mã nguồn, vì vậy nó được xem xét và quản lý phiên bản giống như bất kỳ tệp nguồn nào khác.
- Cùng một bộ ứng dụng có thể được khởi chạy từ IDE, từ một trình chạy như... JUnitTừ lõi, hoặc từ một công cụ xây dựng.
Hạn chế
- @SuiteClasses là một danh sách được mã hóa cứng, vì vậy một lớp kiểm thử mới sẽ bị bỏ qua một cách âm thầm cho đến khi ai đó chỉnh sửa bộ kiểm thử.
- Bộ tài liệu này không đảm bảo thứ tự sắp xếp nào khác ngoài thứ tự các lớp được liệt kê.
- Không có gì được dùng chung giữa các hạng phòng thành viên, vì vậy một dãy phòng không thể thay thế cho một phòng thay đồ hoặc một hạng phòng cơ bản.
- Các công cụ xây dựng hiện nay đã tự động phát hiện các lớp kiểm thử dựa trên quy ước đặt tên, điều này giúp cho việc sử dụng bộ kiểm thử trở nên dư thừa trong nhiều dự án.
Những lỗi thường gặp khi tạo JUnit Bộ thử nghiệm
Hầu hết các sự cố trong bộ phần mềm đều tạo ra một thông báo ngắn gọn, không hữu ích. Bảng dưới đây đối chiếu các thông báo bạn có thể gặp với nguyên nhân và cách khắc phục.
| Thông báo hoặc triệu chứng | Nguyên nhân | Sửa chữa |
| initializationError: Không có phương thức nào có thể chạy được | Lớp này được chạy như một lớp kiểm thử thông thường, nhưng nó chỉ chứa các chú thích. | Thêm @RunWith(Suite.class) để trình chạy bộ kiểm thử tiếp quản thay vì trình chạy mặc định. |
| Không tìm thấy ký hiệu: lớp Suite | Quá trình nhập Suite bị thiếu. | Nhập org.junit.runners.Suite cùng với org.junit.runner.RunWith. |
| Chương trình vẫn diễn ra, nhưng một tiết học bị bỏ qua. | Lớp học đó chưa bao giờ được thêm vào danh sách @SuiteClasses. | Thêm lớp một cách rõ ràng, hoặc chuyển sang sử dụng `@SelectPackages`. JUnit 5. |
| Tên lớp không được trình biên dịch chấp nhận | @Runwith hoặc @suiteClasses đã được gõ sai kiểu chữ hoa chữ thường. | Java Các chú thích phân biệt chữ hoa chữ thường: hãy viết chính xác @RunWith và @SuiteClasses. |
| Các bài kiểm tra trong chính lớp suite sẽ không bao giờ được thực thi. | Một phương thức @Test đã được thêm vào trình giữ bộ kiểm thử. | Hãy giữ nguyên đối tượng chứa (holder) và chuyển phương thức kiểm thử vào một lớp thành viên. |
Viết bản nhạc một lần và giữ nguyên.ping Việc đảm bảo tính chính xác mới là công việc thực sự. Nếu danh sách lệch khỏi các lớp trên đĩa, bộ kiểm tra sẽ báo màu xanh lá cây trong khi một phần của... kiểm tra đơn vị Lệnh này không bao giờ được thực thi, đây là một trong những lỗi âm thầm nhất. kiểm thử phần mềm.







