JUnit ErrorCollector @Rule พร้อมตัวอย่าง
ในสถานการณ์ปกติ เมื่อใดก็ตามที่คุณระบุข้อผิดพลาดใดๆ ในระหว่างการทดสอบ คุณจะหยุดการทดสอบ แก้ไขข้อผิดพลาด และทำการทดสอบอีกครั้ง
แต่ JUnit มีแนวทางที่แตกต่างออกไปเล็กน้อย กับ JUnit ตัวรวบรวมข้อผิดพลาด คุณยังคงดำเนินการทดสอบต่อไปได้แม้ว่าจะพบปัญหาหรือการทดสอบล้มเหลวก็ตาม ตัวรวบรวมข้อผิดพลาดรวบรวมออบเจ็กต์ข้อผิดพลาดทั้งหมดและรายงานเพียงครั้งเดียวหลังจากการดำเนินการทดสอบสิ้นสุดลง
เหตุใดจึงต้องใช้ตัวรวบรวมข้อผิดพลาด
ขณะเขียนสคริปต์ทดสอบ คุณต้องดำเนินการทดสอบทั้งหมด แม้ว่าบรรทัดโค้ดใดๆ จะล้มเหลวเนื่องจากเครือข่ายล้มเหลว การยืนยันล้มเหลว หรือเหตุผลอื่นใด ในสถานการณ์ดังกล่าว คุณยังคงสามารถรันสคริปต์ทดสอบต่อไปได้โดยใช้คุณสมบัติพิเศษที่มอบให้โดย JUnit เรียกว่า “ตัวรวบรวมข้อผิดพลาด”
สำหรับสิ่งนี้, JUnit ใช้ @คำอธิบายประกอบกฎ ซึ่งใช้เพื่อสร้างวัตถุของตัวรวบรวมข้อผิดพลาด เมื่อสร้างออบเจ็กต์สำหรับตัวรวบรวมข้อผิดพลาดแล้ว คุณสามารถเพิ่มข้อผิดพลาดทั้งหมดลงในออบเจ็กต์โดยใช้วิธีการได้อย่างง่ายดาย addError (ข้อผิดพลาดที่สามารถโยนได้)- ดังที่คุณทราบแล้วว่า โยนได้ เป็นซุปเปอร์คลาสของ ข้อยกเว้น และ ความผิดพลาด ชั้นเรียนใน Java. เมื่อคุณเพิ่มข้อผิดพลาดในลักษณะนี้ ข้อผิดพลาดเหล่านี้จะถูกบันทึกลงใน JUnit ผลการทดสอบ .
ประโยชน์ของการเพิ่มข้อผิดพลาดทั้งหมดในตัวรวบรวมข้อผิดพลาดคือคุณสามารถตรวจสอบข้อผิดพลาดทั้งหมดได้ในคราวเดียว นอกจากนี้ หากสคริปต์ล้มเหลวในระหว่างกลาง สคริปต์ก็ยังสามารถดำเนินการต่อไปได้
หมายเหตุ: ในกรณีของการใช้ assert แบบธรรมดาหรือ try/catch block การใช้วิธีรวบรวมข้อผิดพลาดจะไม่สามารถทำได้
โค้ดตัวอย่าง
เพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับตัวรวบรวมข้อผิดพลาด โปรดดูตัวอย่างโค้ดด้านล่างซึ่งสาธิตวิธีการสร้างออบเจ็กต์ตัวรวบรวมข้อผิดพลาดและเพิ่มข้อผิดพลาดทั้งหมดในออบเจ็กต์นั้นเพื่อติดตามปัญหา:
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 ใน jUnit คืออะไร?
JUnit ให้การจัดการการทดสอบแบบพิเศษ กรณีทดสอบ หรือชุดทดสอบโดยใช้ @คำอธิบายประกอบกฎ- เมื่อใช้ @rule คุณสามารถเพิ่มหรือกำหนดพฤติกรรมของการทดสอบใหม่ได้อย่างง่ายดาย
มีกฎในตัวหลายประการที่จัดทำโดย JUnit API ที่ผู้ทดสอบสามารถใช้ได้ หรือแม้กระทั่งคุณสามารถเขียนกฎของเราเองได้
ดูโค้ดด้านล่างซึ่งแสดงวิธีใช้คำอธิบายประกอบ @rule พร้อมกับ Error Collector:
@Rule public ErrorCollector collector= new ErrorCollector();
ตัวอย่างการใช้ ErrorCollector
เพื่อทำความเข้าใจตัวรวบรวมข้อผิดพลาด เรามาสร้างคลาสและกฎเพื่อรวบรวมข้อผิดพลาดทั้งหมดกันดีกว่า คุณจะเพิ่มข้อผิดพลาดทั้งหมดโดยใช้ addError(throwable) ที่นี่
ดูโค้ดด้านล่างซึ่งเพียงสร้างกฎซึ่งไม่มีอะไรนอกจากการสร้าง “วัตถุตัวรวบรวมข้อผิดพลาด” ซึ่งใช้เพิ่มเติมเพื่อเพิ่มข้อผิดพลาดทั้งหมดเพื่อรายงานปัญหาในตอนท้าย:
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
มาเพิ่มคลาสการทดสอบด้านบนในตัวรันการทดสอบและดำเนินการเพื่อรวบรวมข้อผิดพลาดทั้งหมด ดูรหัสด้านล่าง:
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()); } }
Output:
ดูการติดตามความล้มเหลวซึ่งจะติดตามข้อผิดพลาดทั้งหมดในที่เดียว:
ประโยชน์ของการ JUnit ตัวรวบรวมข้อผิดพลาด
คุณสามารถใช้ได้ JUnit การยืนยันการทำงานหรือการตรวจสอบ GUI เช่น
- assertEquals(ข้อความสตริง, วัตถุที่คาดหวัง, วัตถุจริง) ซึ่งเปรียบเทียบว่าวัตถุทั้งสองมีค่าเท่ากัน
- ในทำนองเดียวกัน assertTrue(Boolean Condition) ยืนยันว่าเงื่อนไขเป็นจริง
การใช้การยืนยัน การทดสอบการตรวจสอบกลายเป็นเรื่องง่าย แต่ปัญหาสำคัญประการหนึ่งคือการดำเนินการทดสอบจะหยุดลงแม้ว่าการยืนยันเพียงครั้งเดียวจะล้มเหลวก็ตาม
การทดสอบความต่อเนื่องและการจัดการการกู้คืนเป็นสิ่งสำคัญในการทดสอบความสำเร็จของระบบอัตโนมัติ ตัวรวบรวมข้อผิดพลาดเป็นวิธีที่ดีที่สุดในการจัดการกับสถานการณ์ประเภทนี้
สรุป
- ตัวรวบรวมข้อผิดพลาดของ Junit ช่วยให้สามารถทดสอบต่อไปได้แม้จะพบปัญหาแรกแล้วและการทดสอบล้มเหลวในตอนท้าย
- ตัวรวบรวมข้อผิดพลาดรวบรวมออบเจ็กต์ข้อผิดพลาดทั้งหมดและรายงานเฉพาะการดำเนินการทดสอบเท่านั้น
- ประโยชน์ของการเพิ่มข้อผิดพลาดทั้งหมดในตัวรวบรวมข้อผิดพลาดคือคุณสามารถตรวจสอบข้อผิดพลาดทั้งหมดได้ในครั้งเดียว
- ตัวรวบรวมข้อผิดพลาดเพียงเพิ่มข้อผิดพลาดโดยใช้วิธี addError(throwable err) จัดทำโดย ErrorCollector.java