JUnit ErrorCollector @Rule kèm ví dụ
Trong trường hợp bình thường, bất cứ khi nào bạn xác định được bất kỳ lỗi nào trong quá trình thực hiện kiểm thử, bạn sẽ dừng kiểm thử, sửa lỗi và chạy lại kiểm thử.
Nhưng JUnit có cách tiếp cận hơi khác một chút. Với JUnit trình thu thập lỗi, bạn vẫn có thể tiếp tục thực hiện kiểm thử ngay cả sau khi tìm thấy sự cố hoặc kiểm thử thất bại. Trình thu thập lỗi thu thập tất cả các đối tượng lỗi và chỉ báo cáo lỗi đó một lần sau khi quá trình thực hiện kiểm tra kết thúc.
Tại sao nên sử dụng Trình thu thập lỗi?
Trong khi viết tập lệnh kiểm thử, bạn muốn thực hiện tất cả các kiểm thử ngay cả khi bất kỳ dòng mã nào bị lỗi do lỗi mạng, lỗi xác nhận hoặc bất kỳ lý do nào khác. Trong trường hợp đó, bạn vẫn có thể tiếp tục thực thi tập lệnh kiểm thử bằng tính năng đặc biệt được cung cấp bởi JUnit được gọi là "trình thu thập lỗi".
Đối với điều này, JUnit sử dụng Chú thích @Rule được sử dụng để tạo một đối tượng thu thập lỗi. Khi đối tượng thu thập lỗi được tạo, bạn có thể dễ dàng thêm tất cả các lỗi vào đối tượng bằng phương thức addError (Lỗi có thể ném được). Như bạn đã biết, đó Ném được là siêu hạng của Ngoại lệ và lỗi lớp trong Java. Khi bạn thêm lỗi theo cách này, các lỗi này sẽ được ghi lại JUnit kết quả kiểm tra .
Lợi ích của việc thêm tất cả lỗi vào Trình thu thập lỗi là bạn có thể xác minh tất cả lỗi cùng một lúc. Ngoài ra, nếu tập lệnh bị lỗi ở giữa, nó vẫn có thể tiếp tục thực thi.
Chú thích: Trong trường hợp sử dụng khối xác nhận hoặc khối thử/bắt đơn giản, việc sử dụng phương pháp thu thập lỗi sẽ không thể thực hiện được.
Mã mẫu
Để hiểu thêm về Error Collector, hãy xem ví dụ mã bên dưới minh họa cách tạo đối tượng Error Collector và thêm tất cả lỗi trong đối tượng đó để theo dõi sự cố:
package guru99.junit; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); collector.checkThat(getResults(), not(containsString("here is an error"))); // all lines of code will execute and at the end a combined failure will be logged in. } }
@Rule trong jUnit là gì?
JUnit cung cấp loại xử lý đặc biệt của các bài kiểm tra, Trường hợp thử nghiệm hoặc bộ thử nghiệm bằng cách sử dụng chú thích @rule. Sử dụng @rule, bạn có thể dễ dàng thêm hoặc xác định lại hành vi của thử nghiệm.
Có một số quy tắc tích hợp được cung cấp bởi JUnit API mà người thử nghiệm có thể sử dụng hoặc thậm chí bạn có thể viết quy tắc của riêng chúng tôi.
Xem dòng mã bên dưới để biết cách sử dụng chú thích @rule cùng với Trình thu thập lỗi:
@Rule public ErrorCollector collector= new ErrorCollector();
Ví dụ sử dụng ErrorCollector
Để hiểu trình thu thập lỗi, hãy tạo một lớp và quy tắc để thu thập tất cả các lỗi. Bạn sẽ thêm tất cả các lỗi bằng cách sử dụng addError(throwable) tại đây.
Xem đoạn mã bên dưới, nó chỉ đơn giản là tạo một quy tắc không có gì khác ngoài việc tạo “đối tượng Trình thu thập lỗi”. Cái này được sử dụng thêm để thêm tất cả các lỗi nhằm báo cáo vấn đề ở cuối:
ErrorCollectorExample.java
package guru99.junit; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ErrorCollector; public class ErrorCollectorExample { @Rule public ErrorCollector collector = new ErrorCollector(); @Test public void example() { collector.addError(new Throwable("There is an error in first line")); collector.addError(new Throwable("There is an error in second line")); System.out.println("Hello"); try { Assert.assertTrue("A " == "B"); } catch (Throwable t) { collector.addError(t); } System.out.println("World!!!!"); } }
TestRunner.java
Hãy thêm lớp kiểm tra ở trên vào trình chạy thử nghiệm và thực thi nó để thu thập tất cả các lỗi. Xem mã dưới đây:
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(ErrorCollectorExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Đầu ra:
Xem dấu vết lỗi theo dõi tất cả các lỗi ở một nơi:
Lợi ích của JUnit Bộ sưu tập lỗi
Bạn có thể sử dụng JUnit xác nhận để xác thực chức năng hoặc GUI, vd
- khẳng địnhEquals(Thông báo chuỗi, Đối tượng dự kiến, Đối tượng thực tế) để so sánh hai đối tượng bằng nhau.
- Tương tự, khẳng địnhTrue(Boolean condition) khẳng định rằng một điều kiện là đúng.
Sử dụng xác nhận, kiểm tra xác nhận trở nên dễ dàng. Nhưng một vấn đề lớn là việc thực hiện kiểm thử sẽ dừng ngay cả khi một xác nhận duy nhất không thành công.
Kiểm tra tính liên tục và xử lý phục hồi là rất quan trọng để kiểm tra thành công tự động hóa. Error Collector là cách tốt nhất để xử lý các tình huống như vậy.
Tổng kết
- Trình thu thập lỗi Junit cho phép tiếp tục kiểm tra ngay cả sau khi tìm thấy sự cố đầu tiên và kiểm tra không thành công ở cuối
- Trình thu thập lỗi thu thập tất cả các đối tượng lỗi và chỉ báo cáo nó, sau cùng quá trình thực hiện kiểm tra kết thúc.
- Lợi ích của việc thêm tất cả lỗi vào Trình thu thập lỗi là bạn có thể xác minh tất cả lỗi cùng một lúc
- Trình thu thập lỗi chỉ cần thêm lỗi bằng cách sử dụng phương thức addError(lỗi có thể ném được) do ErrorCollector.java cung cấp.