Hướng dẫn sử dụng chú thích JUnit với ví dụ

JUnit Annotations là gì?

JUNIT ANNOTATIONS là một dạng siêu dữ liệu cú pháp đặc biệt có thể được thêm vào mã nguồn Java để có cấu trúc và khả năng đọ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 Junit4, giúp mã Java dễ đọc và đơn giản hơn. Đây là sự khác biệt lớn giữa Junit3 và Junit4 mà Junit4 dựa trên chú thích.

Với kiến ​​thức về các chú thích trong Junit5, người ta có thể dễ dàng tìm hiểu và thực hiện một bài kiểm tra JUnit. Dưới đây là danh sách các chú thích quan trọng và thường được sử dụng:

Không. Chú thích Sự miêu tả
1. @Kiểm tra Chú thích này là sự thay thế của org.junit.TestCase cho biết rằng phương thức public void mà nó được đính kèm có thể được thực thi như một 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 hiện một số câu lệnh, chẳng hạn như điều kiện tiên quyết trước mỗi trường hợp thử nghiệm.
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 hiện 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 Test Case, ví dụ: đặt lại biến, xóa tệp tạm thời, 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. @Ignores 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 thử nghiệm, ví dụ như tắt một số trường hợp thử nghiệm trong quá trình thực thi thử nghiệm.
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 số thời gian chờ trong quá trình thực thi thử nghiệm, chẳng hạn như nếu bạn đang làm việc theo SLA (Thỏa thuận mức dịch vụ) nào đó và các thử nghiệm cần được hoàn thành trong một thời gian nhất định.
số 8. @Test (dự kiến ​​= 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 thử nghiệm. Ví dụ, nếu bạn muốn kiểm tra xem một phương thức cụ thể có ném ra ngoại lệ được chỉ định hay không.

Trong hướng dẫn này, bạn sẽ học-

  • Ví dụ về chú thích JUnit
  • Lớp Assert JUnit
  • Lớp trường hợp thử nghiệm JUnit
  • Lớp JUnit TestResult
  • Lớp bộ thử nghiệm JUnit

Ví dụ về chú thích JUnit

Hãy tạo một lớp bao gồm các chú thích JUnit quan trọng với các câu lệnh in đơn giản và thực thi nó với một lớp chạy thử nghiệm:

Bước 1) Hãy xem xét lớp java bên dưới có các 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

gói guru99.junit;nhập static org.junit.Assert.assertEquals;nhập static org.junit.Assert.assertFalse;nhập java.util.ArrayList;nhập khẩu org.junit.After;nhập org.junit.AfterClass;nhập khẩu org.junit.Before;nhập org.junit.BeforeClass;nhập khẩu org.junit.Ignore;nhập khẩu org.junit.Test;public class JunitAnnotationsExample {danh sách  riêng tư ArrayList;@BeforeClasspublic static void m1 () {System.out.println ("Sử dụng @BeforeClass, được thực thi trước tất cả các trường hợp thử nghiệm");}@Trướckhoảng trống công cộng m2 () {list = new ArrayList  ();System.out.println ("Sử dụng chú thích @Before, được thực thi trước mỗi trường hợp thử nghiệm");}@Sau giờ họcpublic static void m3 () {System.out.println ("Sử dụng @AfterClass, được thực thi sau tất cả các trường hợp thử nghiệm");}@Saupublic void m4 () {list.clear ();System.out.println ("Sử dụng @After, được thực thi sau mỗi trường hợp thử nghiệm");}@Kiểm trapublic void m5 () {list.add ("test");khẳng địnhFalse (list.isEmpty ());khẳng địnhEquals (1, list.size ());}@Làm lơpublic void m6 () {System.out.println ("Sử dụng @Ignore, việc thực thi này bị bỏ qua");}@Test (thời gian chờ = 10)public void m7 () {System.out.println ("Sử dụng @Test (thời gian chờ), nó có thể được sử dụng để thực thi thời gian chờ trong trường hợp thử nghiệm JUnit4");}@Test (dự kiến ​​= NoSuchMethodException.class)public void m8 () {System.out.println ("Sử dụng @Test (dự kiến), nó sẽ kiểm tra ngoại lệ được chỉ định trong quá trình thực thi");}}

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

gói guru99.junit;nhập org.junit.runner.JUnitCore;nhập org.junit.runner.Result;nhập org.junit.runner.notification.Failure;lớp công khai TestRunner {public static void main (String [] args) {Kết quả kết quả = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Lỗi không thành công: result.getFailures ()) {System.out.println (fail.toString ());}System.out.println ("Kết quả ==" + result.wasSuccessful ());}}

Kết quả mong đợi

  • Tất cả các trường hợp thử nghiệm sẽ được thực thi lần lượt và tất cả các câu lệnh in có thể được nhìn thấy trên một bảng điều khiển.
  • Như đã thảo luận trong bảng trên @Before, @BeforeClass [phương thức m1 () và m2 ()] sẽ được thực thi trước mỗi và trước tất cả các trường hợp thử nghiệm tương ứng.
  • Theo cách tương tự @ after, @ 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 thử nghiệm tương ứng. @ignore (phương thức m6 ()) sẽ được coi là bỏ qua kiểm tra.

Hãy phân tích chi tiết các trường hợp kiểm thử được sử dụng trong lớp java ở trên:

  1. Hãy xem xét phương thức m5 () như được đưa ra bên dưới:
@Kiểm trapublic void m5 () {list.add ("test");khẳng địnhFalse (list.isEmpty ());khẳng địnhEquals (1, list.size ());}

Trong phương pháp trên khi bạn thêm một chuỗi trong biến "danh sách", vì vậy

  • list.isEmpty () sẽ trả về false.
  • khẳng địnhFalse (list.isEmpty ()) phải trả về true.
  • Kết quả là trường hợp thử nghiệm sẽ vượt qua .

Vì bạn chỉ thêm một chuỗi trong danh sách, vì vậy kích thước là một.

  • list.size () phải trả về giá trị int là "1".
  • Vì vậy , khẳng địnhEquals (1, list.size ()) phải trả về true.
  • Kết quả là trường hợp thử nghiệm sẽ vượt qua .
  1. Hãy xem xét phương thức m7 () như được đưa ra bên dưới:
@Test (thời gian chờ = 10)public void m7 () {System.out.println ("Sử dụng @Test (thời gian chờ), nó có thể được sử dụng để thực thi thời gian chờ trong trường hợp thử nghiệm JUnit4");}

Như đã thảo luận ở trên, chú thích @Test (timeout = 10) được sử dụng để thực thi thời gian chờ trong trường hợp thử nghiệm.

  1. Hãy xem xét phương thức m8 () như được đưa ra bên dưới:
@Test (dự kiến ​​= NoSuchMethodException.class)public void m8 () {System.out.println ("Sử dụng @Test (dự kiến), nó sẽ kiểm tra ngoại lệ được chỉ định trong quá trình thực thi");}

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 của nó, vì vậy phương thức m8 () sẽ ném "Không có ngoại lệ phương pháp như vậy". Kết quả là, bài kiểm tra sẽ được thực hiện với một ngoại lệ.

Khi tất cả các trường hợp thử nghiệm được thông qua, điều này dẫn đến việc thực thi thử nghiệm 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, 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. Xem đầu ra bên dưới :

Xem các câu lệnh in dưới đây có thể được 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 thử nghiệm

Sử dụng @After, được thực thi sau mỗi 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 thử nghiệm

Sử dụng @Test (thời gian chờ), nó có thể được sử dụng để thực thi thời gian chờ trong trường hợp thử nghiệm JUnit4

Sử dụng @After, được thực thi sau mỗi 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 thử nghiệm

Sử dụng @Test (dự kiến), 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 thử nghiệm

Sử dụng @AfterClass, được thực thi sau tất cả các trường hợp thử nghiệm

Lớp Assert JUnit

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 đượ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, kết quả kiểm tra 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 pháp Assert quan trọng và mô tả:

Không. phương pháp Sự miêu 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 Đối tượng
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 là sai.
3. void khẳng địnhNotNull (Đối tượng đối tượng) Chức năng "khẳng địnhNotNull" là để kiểm tra xem một đối tượng không phải là null.
4. void khẳng địnhNull (Đối tượng đối tượng) Chức năng "khẳng địnhNull" là để kiểm tra xem một đối tượng có phải là null hay không.
5. void khẳng địnhTrue (điều kiện boolean) Chức năng "khẳng định" là để kiểm tra xem một điều kiện có đúng không.
6. void fail () Nếu bạn muốn ném bất kỳ lỗi xác nhận nào, bạn có fail () 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 "khẳng định" là để kiểm tra xem hai đối tượng có tham chiếu đến cùng một đối tượng hay không.
số 8. void khẳng địnhNotSame ([Thông báo chuỗi] Chức năng "khẳng địnhNotSame" là để kiểm tra xem hai đối tượng không tham chiếu đến cùng một đối tượng.

Lớp trường hợp thử nghiệm JUnit

Để chạy nhiều thử nghiệm, lớp TestCase có sẵn trong các gói org.junit.TestCase . Chú thích @Test cho JUnit biết rằng phương thức public void này (Test Case tại đây) mà nó được đính kèm có thể được chạy như một trường hợp thử nghiệm.

Bảng dưới đây cho thấy một số phương thức quan trọng có sẵn trong lớp org.junit.TestCase :

Không. phương pháp Sự miêu tả
1. int countTestCases () Phương pháp này được sử dụng để đếm có bao nhiêu trường hợp thử nghiệm được thực thi bằng phương thức run (TestResult tr) .
2. TestResult createResult () Phương thức này được sử dụng để tạo một đối tượng TestResult .
3. Chuỗi getName () Phương thức này trả về một chuỗi không có gì khác ngoài TestCase .
4. TestResult run () Phương thức này được sử dụng để thực hiện một bài kiểm tra trả về một đối tượng TestResult
5. void run (kết quả TestResult) Phương thức này được sử dụng để thực hiện một bài kiểm tra có đối tượng TestResult không trả về bất kỳ thứ gì.
6. void setName (Tên chuỗi) Phương pháp này được sử dụng để đặt tên của TestCase.
7. void setUp () Phương thức 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.
số 8. void ráchDown () Phương thức 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.

Lớp JUnit TestResult

Khi bạn thực hiện một bài kiểm tra, nó sẽ trả về một kết quả (ở dạng đối tượng TestResult ). Đố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ả thử nghiệm này có thể là thất bại hoặc thành công. Xem bảng dưới đây để biết các phương thức quan trọng được sử dụng trong lớp org.junit.TestResult:
Không. phương pháp Sự miêu tả
1. void addError (Kiểm tra thử nghiệm, Có thể ném 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 bài kiểm tra.
2. void addFailure (Kiểm tra thử nghiệm, 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 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 thử nghiệm được thực hiện (đã hoàn thành)
4. int errorCount () Phương pháp này được sử dụng để nhận lỗi được phát hiện trong quá trình thực hiện kiểm tra.
5. Enumeration lỗi () Phương thức này chỉ trả về một tập hợp các lỗi (Liệt kê ở đây).
6. int failCount () Phương pháp này được sử dụng để tính số lỗi được phát hiện trong quá trình thực hiện kiểm tra.
7. void run (kiểm tra TestCase) Phương pháp này được sử dụng để thực thi một trường hợp thử nghiệm.
số 8. int runCount () Phương thức này chỉ đơn giản là đếm thử nghiệm đã 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 thử nghiệm được bắt đầu.
10. void stop () Phương pháp này được sử dụng để chạy thử để dừng lại.

Lớp bộ thử nghiệm JUnit

Nếu bạn muốn thực hiện nhiều bài kiểm tra theo một thứ tự được chỉ định, nó có thể được thực hiện bằng cách kết hợp tất cả các bài kiểm tra ở một nơi. Nơi này được gọi là dãy phòng thử nghiệm.

Xem bảng dưới đây để biết các phương thức quan trọng được sử dụng trong lớp org.junit.TestSuite :

Không. phương pháp Sự miêu tả
1. void addTest (Kiểm tra thử nghiệm) 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ộ.
2. void addTestSuite (Class testClass) Phương thức này được sử dụng nếu bạn muốn chỉ định lớp trong khi thêm thử nghiệm vào bộ.
3. int countTestCases () 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 thức này được sử dụng để thực hiện kiểm tra và thu thập kết quả kiểm tra trong đối tượng TestResult .
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 index) Phương pháp này được sử dụng nếu bạn muốn trả về kiểm tra ở chỉ mục nhất định.
số 8. int testCount () Phương pháp này được sử dụng nếu bạn muốn trả về một số bài kiểm tra trong Suite.
9. Cảnh báo kiểm tra tĩnh (Thông báo chuỗi) Phương thức này trả về một bài kiểm tra sẽ không thành công và ghi lại một thông báo cảnh báo.

Tóm lược:

  • JUnit cung cấp một API di động, cung cấp tất cả các lớp và chú thích quan trọng 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.Assert
    • org.junit.TestCase
    • org.junit.TestResult
    • org.junit.TestSuite
  • danh sách các chú thích quan trọng và thường xuyên được sử dụng

    @Trước

    @BeforeClass

    @Sau

    @Sau giờ học

    @Kiểm tra

    @Làm lơ

thú vị bài viết...