JUnit Hướng dẫn chú thích với ví dụ: @Test và @After là gì
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 để dễ đọ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. Chú thích đã được giới thiệu trong Junit4, giúp Java code dễ đọc và đơn giản hơn. Đây là sự khác biệt lớn giữa Junit3 và Junit4 là Junit4 dựa trên chú thích.
Với kiến thức về chú thích trong Junit5, người ta có thể dễ dàng học và triển khai một 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:
S.No. | Chú thích | Mô tả |
---|---|---|
1. | @Thử nghiệm | Chú thích này là sự thay thế của org.junit.TestCase chỉ ra rằng phương thức public void mà nó được đính kèm có thể được thực thi dưới dạng Trường hợp thử nghiệm. |
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ử. |
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 thử nghiệm, ví dụ: kết nối thử nghiệm phải được thực thi trước tất cả các trường hợp thử nghiệm. |
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ệm ví dụ: đặt lại các biến, xóa các tệp tạm thời, các biến, v.v. |
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 tất cả các trường hợp thử nghiệm, ví dụ: Giải phóng tài nguyên sau khi thực hiện tất cả các trường hợp thử nghiệm. |
6. | @Bỏ qua | 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 hiện 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 hiện kiểm thử. |
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 một khoảng thời gian chờ trong quá trình thực hiện thử nghiệm, ví dụ: nếu bạn đang làm việc theo một số SLA (Thỏa thuận cấp độ dịch vụ) và các thử nghiệm cần phải được hoàn thành trong một thời gian nhất định. |
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 hiện kiểm tra. Ví dụ, nếu bạn muốn kiểm tra xem một phương thức cụ thể có ném ngoại lệ được chỉ định hay không. |
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 lớp java bên dưới có nhiều phương thức khác nhau được đính kèm với các chú thích được 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 hiện thử nghiệm 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 thử nghiệm sẽ được thực thi từng trường hợp một và tất cả các câu lệnh in có thể được nhìn thấy trên bảng điều khiển.
- Như đã thảo luận ở bảng trên Chú thích @Before trong JUnit, @BeforeClass [ phương thức m1() và m2() ] sẽ được thực thi trước mỗi trường hợp 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 trong JUnit, @afterClass (phương thức m3() và m4()) sẽ được thực thi sau mỗi 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 tra.
Hãy phân tích chi tiết các trường hợp thử nghiệm được sử dụng trong lớp java trên:
- Hãy xem xét phương thức m5() như được đưa ra dưới đây:
@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 là một.
- danh sách.size() phải trả về giá trị int là “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 dưới đây:
@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)chú thích được sử dụng để thực thi thời gian chờ trong trường hợp thử nghiệm.
- Hãy xem xét phương thức m8() như được đưa ra dưới đây:
@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) sẽ kiểm tra ngoại lệ được chỉ định trong quá trình thực thi nên phương thức m8() sẽ đưa ra “Không có ngoại lệ phương thức như vậy”. Kết quả là thử nghiệm sẽ được thực hiện với một ngoại lệ.
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ì có ba trường hợp thử nghiệm trong ví dụ trên nên tất cả các trường hợp thử nghiệm sẽ được thực hiện từng trường hợp một. Xem đầu ra 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
Lớp này cung cấp một loạt các phương thức xác nhận hữu ích trong việc viết một trường hợp thử nghiệm. Nếu tất cả các câu lệnh khẳng định đều được thông qua, kết quả kiểm tra là thành công. Nếu bất kỳ câu lệnh khẳng định nào không thành công thì kết quả kiểm tra cũng không thành công.
Như bạn đã thấy trước đó, bảng bên dưới mô tả các phương thức và mô tả Assert quan trọng:
S.No. | Phương pháp | Mô 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 với phương thức bằng của lớp Object không |
2. | void khẳng địnhFalse(điều kiện boolean) | chức năng là kiểm tra xem đ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 đưa ra bất kỳ lỗi xác nhận nào, bạn có failed() luôn dẫn đến kết quả không thành công. |
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 thử nghiệm, lớp TestCase có sẵn trong org.junit.TestCase gói. Chú thích @Test cho biết JUnit rằng phương thức public void này (Trường hợp thử nghiệm ở đây) mà nó được đính kèm có thể được chạy dưới dạng trường hợp thử nghiệm.
Bảng dưới đây cho thấy một số phương pháp quan trọng có sẵn trong org.junit.TestCase lớp học:
S.No. | Phương pháp | Mô tả |
---|---|---|
1. | int countTestCase() | Phương pháp này được sử dụng để đếm số lượng ca kiểm thử được thực hiện bởi 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. |
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 trả về một 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 object 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ụ: 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ụ: Giải phóng kết nối cơ sở dữ liệu sau khi thực hiện thao tác giao dịch. |
JUnit Lớp kết quả kiểm tra
Khi bạn thực hiện kiểm tra, nó sẽ trả về một kết quả (ở dạng Kết quả kiểm tra sự vật). Đố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 tra này có thể 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 org.junit.TestResult:
S.No. | Phương pháp | Mô 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 yêu cầu 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 yêu cầu thêm lỗi vào danh sách 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 để phát hiện lỗi trong quá trình thực hiện kiểm thử. |
5. | liệt kê lỗi() | Phương thức này chỉ đơn giản trả về một tập hợp (Liệt kê ở đây) 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 hiện 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 thử nghiệm đã thực hiện. |
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 để kiểm tra việc dừng chạy. |
JUnit Lớp bộ thử nghiệm
Nếu bạn muốn thực hiện nhiều thử nghiệm theo một thứ tự cụ thể, bạn có thể thực hiện bằng cách kết hợp tất cả các thử nghiệm ở một nơi. Nơi này được gọi là phòng thử nghiệm.
Xem bảng dưới đây để biết các phương pháp quan trọng được sử dụng trong org.junit.TestSuite lớp học:
S.No. | Phương pháp | Mô 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 kiểm tra và thu thập kết quả kiểm tra trong 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 của 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ề bài kiểm tra ở chỉ mục đã cho. |
8. | int testCount() | Phương pháp này được sử dụng nếu bạn muốn trả về một số thử nghiệm trong Suite. |
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. |
Tổng kết
- JUnit cung cấp một API di động, cung cấp tất cả các lớp quan trọng và Selenium chú thích hữu ích trong việc viết một bài kiểm tra đơn vị.
- Các lớp rất hữu ích khi viết test case
- org.junit.Khẳng định
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Quan trọng và được sử dụng thường xuyên JUnit danh sách chú thích@Before@BeforeClass@After
@Sau giờ học
@Thử nghiệm
@Phớt lờ