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:

ดูการติดตามความล้มเหลวซึ่งจะติดตามข้อผิดพลาดทั้งหมดในที่เดียว:

TestRunner.Java เอาท์พุต

ประโยชน์ของการ JUnit ตัวรวบรวมข้อผิดพลาด

คุณสามารถใช้ได้ JUnit การยืนยันการทำงานหรือการตรวจสอบ GUI เช่น

  1. assertEquals(ข้อความสตริง, วัตถุที่คาดหวัง, วัตถุจริง) ซึ่งเปรียบเทียบว่าวัตถุทั้งสองมีค่าเท่ากัน
  2. ในทำนองเดียวกัน assertTrue(Boolean Condition) ยืนยันว่าเงื่อนไขเป็นจริง

การใช้การยืนยัน การทดสอบการตรวจสอบกลายเป็นเรื่องง่าย แต่ปัญหาสำคัญประการหนึ่งคือการดำเนินการทดสอบจะหยุดลงแม้ว่าการยืนยันเพียงครั้งเดียวจะล้มเหลวก็ตาม

การทดสอบความต่อเนื่องและการจัดการการกู้คืนเป็นสิ่งสำคัญในการทดสอบความสำเร็จของระบบอัตโนมัติ ตัวรวบรวมข้อผิดพลาดเป็นวิธีที่ดีที่สุดในการจัดการกับสถานการณ์ประเภทนี้

สรุป

  • ตัวรวบรวมข้อผิดพลาดของ Junit ช่วยให้สามารถทดสอบต่อไปได้แม้จะพบปัญหาแรกแล้วและการทดสอบล้มเหลวในตอนท้าย
  • ตัวรวบรวมข้อผิดพลาดรวบรวมออบเจ็กต์ข้อผิดพลาดทั้งหมดและรายงานเฉพาะการดำเนินการทดสอบเท่านั้น
  • ประโยชน์ของการเพิ่มข้อผิดพลาดทั้งหมดในตัวรวบรวมข้อผิดพลาดคือคุณสามารถตรวจสอบข้อผิดพลาดทั้งหมดได้ในครั้งเดียว
  • ตัวรวบรวมข้อผิดพลาดเพียงเพิ่มข้อผิดพลาดโดยใช้วิธี addError(throwable err) จัดทำโดย ErrorCollector.java