Junit Assert และ AssertEquals พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

JUnit คำสั่ง Assert และ AssertEquals ใช้ในการตรวจสอบว่ากรณีทดสอบผ่านหรือไม่ผ่าน โดยการเปรียบเทียบค่าที่คาดหวังกับค่าที่ได้จริง เอกสารนี้จะอธิบายวิธีการ Assert ที่มีอยู่ใน org.junit.Assert รวมถึงการตรวจสอบค่าบูลีน ค่าว่าง เอกลักษณ์ ความเท่าเทียมกัน และอาร์เรย์ พร้อมตัวอย่างการทำงานที่สมบูรณ์

  • วัตถุประสงค์: เมธอด Assert จาก org.junit.Assert ใช้ตรวจสอบเงื่อนไขและตรวจจับความล้มเหลวในการทดสอบ
  • 🔢 ประเภทของวิธีการ: การตรวจสอบแบบ Boolean, null, identical, equals, array-equals และ fail-message ครอบคลุมการตรวจสอบทั่วไป
  • 🟰 assertEquals: เปรียบเทียบค่าโดยใช้เมธอด equals() แล้วห่อหุ้มping แปลงองค์ประกอบพื้นฐานให้เป็นวัตถุก่อน
  • 🔬 จุดลอยตัว: จำเป็นต้องกำหนดค่าความคลาดเคลื่อนเดลต้าเมื่อเปรียบเทียบค่าทศลอยหรือค่าดับเบิล
  • 🧪 ตัวอย่าง: คลาสทดสอบและตัวรันจะแสดงให้เห็นว่าคำสั่ง assert หลักทุกคำสั่งส่งค่ากลับเป็นจริง

JUnit Assert และ AssertEquals

Junit Assert คืออะไร?

Assert เป็นเมธอดที่มีประโยชน์ในการตรวจสอบสถานะว่าผ่านหรือล้มเหลวของกรณีทดสอบ เมธอด assert มีให้โดยคลาส org.junit.Assert ซึ่งสืบทอดมาจากคลาส java.lang.Object

มีการยืนยันหลายประเภท เช่น บูลีน, ค่าว่าง, เหมือนกัน เป็นต้น

JUnit มีคลาสชื่อ Assert ซึ่งมีเมธอดตรวจสอบมากมายที่เป็นประโยชน์ในการเขียนกรณีทดสอบและตรวจจับความล้มเหลวในการทดสอบ

วิธีการยืนยันมีให้โดยชั้นเรียน org.junit.ยืนยันซึ่งเป็นการขยายออกไป java.lang.Object ชั้นเรียน

JUnit ยืนยันวิธีการ

บูลีน

หากคุณต้องการทดสอบเงื่อนไขแบบบูลีน (จริงหรือเท็จ) คุณสามารถใช้วิธีการตรวจสอบ (assert) ต่อไปนี้ได้:

  1. assertTrue (เงื่อนไข)
  2. assertFalse (เงื่อนไข)

ที่นี่เงื่อนไขเป็นค่าบูลีน

วัตถุว่าง

หากคุณต้องการตรวจสอบค่าเริ่มต้นของวัตถุ/ตัวแปร คุณมีวิธีการดังต่อไปนี้:

  1. assertNull (วัตถุ)
  2. assertNotNull (วัตถุ)

วัตถุในที่นี้คือ Java วัตถุ, เช่น assertNull (จริง);

เหมือนกัน

หากคุณต้องการตรวจสอบว่าวัตถุนั้นเหมือนกันหรือไม่ (เช่น การเปรียบเทียบการอ้างอิงสองรายการไปยังวัตถุเดียวกัน) Java วัตถุ) หรือแตกต่างกัน:

  1. assertSame(expected, actual) — จะส่งคืนค่าจริงหาก คาดหวัง == จริง.
  2. assertNotSame (ที่คาดหวัง, จริง)

ยืนยันเท่ากับ

หากคุณต้องการทดสอบความเท่ากันของวัตถุสองชิ้น คุณสามารถใช้วิธีการต่อไปนี้:

  • assertEquals (ที่คาดหวัง, จริง)

มันจะกลับมาเป็นจริงถ้า ค่าที่คาดหวังเท่ากับค่าจริง คืนค่าเป็นจริง

ยืนยันอาร์เรย์เท่ากับ

หากคุณต้องการทดสอบความเท่ากันของอาร์เรย์ คุณสามารถใช้วิธีต่อไปนี้:

  • assertArrayEquals (คาดหวัง, จริง)

ต้องใช้วิธีการข้างต้นหากอาร์เรย์มีความยาวเท่ากัน สำหรับแต่ละค่าที่ถูกต้องสำหรับ iคุณสามารถตรวจสอบได้ตามด้านล่างนี้:

  • assertEquals(expected[i], actual[i])
  • assertArrayEquals(expected[i], actual[i])

ข้อความล้มเหลว

หากคุณต้องการที่จะโยนข้อผิดพลาดในการยืนยันคุณมี ล้มเหลว()ซึ่งส่งผลให้ได้รับผลการประเมินว่าล้มเหลวเสมอ

  • ล้มเหลว(ข้อความ);

คุณสามารถมีวิธีการยืนยันที่มีส่วนเพิ่มเติมได้ เชือก พารามิเตอร์เป็นพารามิเตอร์แรก สตริงนี้จะถูกเพิ่มต่อท้ายข้อความแสดงข้อผิดพลาดหากการตรวจสอบล้มเหลว ตัวอย่างเช่น ล้มเหลว (ข้อความ) สามารถเขียนเป็น:

  • assertEquals(message, expected, actual)

JUnit ยืนยันเท่ากับ

คุณมี assertEquals(a, b)ซึ่งขึ้นอยู่กับ เท่ากับ () วิธีการของคลาส Object

  • ในที่นี้ก็จะประเมินเป็น. ก.เท่ากับ(ข).
  • ในที่นี้คลาสที่อยู่ระหว่างการทดสอบใช้เพื่อกำหนดความสัมพันธ์ความเท่าเทียมกันที่เหมาะสม
  • หากคลาสไม่แทนที่ไฟล์ เท่ากับ () วิธีการของ วัตถุ คลาสนี้จะได้รับพฤติกรรมเริ่มต้นของคลาสนั้น เท่ากับ () วิธีการ เช่น เอกลักษณ์ของวัตถุ

If a และ b เป็นพื้นฐานเช่น ไบต์, int, บูลเป็นต้น จากนั้นจะดำเนินการดังต่อไปนี้สำหรับ assertEquals(a, b):

a และ b จะถูกแปลงเป็นประเภทออบเจ็กต์ wrapper ที่เทียบเท่ากัน (ไบต์, จำนวนเต็ม, บูลีนฯลฯ) จากนั้น ก.เท่ากับ(ข) จะได้รับการประเมิน

ตัวอย่างเช่น ลองพิจารณาสตริงด้านล่างที่มีค่าเดียวกัน เรามาทดสอบโดยใช้ assertEquals กัน:

String obj1 = "Junit";
String obj2 = "Junit";
assertEquals(obj1, obj2);

คำสั่ง assert ข้างต้นจะส่งคืนค่า true เนื่องจาก obj1.equals(obj2) ส่งคืนค่า true

การยืนยันจุดลอยตัว

เมื่อคุณต้องการเปรียบเทียบประเภทข้อมูลทศนิยม (เช่น สอง or ลอย) คุณต้องระบุพารามิเตอร์เพิ่มเติมอีกหนึ่งตัว รูปสามเหลี่ยมเพื่อหลีกเลี่ยงปัญหาข้อผิดพลาดจากการปัดเศษขณะเปรียบเทียบเลขทศนิยม

การยืนยันประเมินตามที่ระบุด้านล่าง:

  • Math.abs(expected - actual) <= delta

ตัวอย่างเช่น:

assertEquals(aDoubleคุณค่าอีกประการหนึ่งDoubleค่า 0.001)

JUnit ยืนยันตัวอย่าง

ตัวอย่างด้านล่างนี้แสดงวิธีการยืนยันเงื่อนไขโดยใช้ JUnit ยืนยันวิธีการ

มาสร้างคลาสทดสอบง่ายๆ ชื่อ... กันเถอะ การทดสอบ Junit4AssertionTest.java และคลาสนักวิ่งทดสอบ TestRunner.java.

คุณจะต้องสร้างตัวแปรและคำสั่ง assert ที่สำคัญบางส่วนในเอกสารนี้ JUnit.

ในตัวอย่างนี้ คุณจะเรียกใช้คลาสทดสอบของเราโดยใช้ไฟล์ TestRunner.java

ขั้นตอน 1) เรามาสร้างคลาสที่ครอบคลุมวิธีการตรวจสอบความถูกต้อง (assert statement) ที่สำคัญทั้งหมดกันเถอะ JUnit:

การทดสอบ Junit4AssertionTest.java

package guru99.junit;

import static org.junit.Assert.*;
import org.junit.Test;

public class Junit4AssertionTest {

    @Test
    public void testAssert() {

        // Variable declaration
        String string1 = "Junit";
        String string2 = "Junit";
        String string3 = "test";
        String string4 = "test";
        String string5 = null;
        int variable1 = 1;
        int variable2 = 2;
        int[] airethematicArrary1 = { 1, 2, 3 };
        int[] airethematicArrary2 = { 1, 2, 3 };

        // Assert statements
        assertEquals(string1, string2);
        assertSame(string3, string4);
        assertNotSame(string1, string3);
        assertNotNull(string1);
        assertNull(string5);
        assertTrue(variable1 < variable2);
        assertArrayEquals(airethematicArrary1, airethematicArrary2);
    }
}

ขั้นตอน 2) คุณต้องสร้างคลาสสำหรับเรียกใช้การทดสอบเพื่อรันคลาสข้างต้น:

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(Junit4AssertionTest.class);
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
        System.out.println("Result==" + result.wasSuccessful());
    }
}

ขั้นตอน 3) เรามาวิเคราะห์ผลลัพธ์ที่คาดหวังทีละขั้นตอนกัน พิจารณาคำสั่ง assert ทั้งหมดทีละข้อ:

  1. assertEquals(string1, string2);

ตอนนี้ให้เปรียบเทียบ string1=”Junit” กับ string2=”Junit” โดยใช้เมธอด equals ของคลาส Object โดยแทนที่เมธอด assertEquals ด้วยเมธอด java.lang.Object.equals()

string1.equals(string2) => ส่งคืนค่า true

ดังนั้น assertEquals(string1, string2) จะส่งคืนค่า จริง.

  1. assertSame (string3, string4);

ฟังก์ชัน “assertSame()” ใช้สำหรับตรวจสอบว่าอ็อบเจ็กต์ทั้งสองอ้างอิงถึงอ็อบเจ็กต์เดียวกันหรือไม่ เนื่องจาก string3=”test” และ string4=”test” ดังนั้นทั้ง string3 และ string4 จึงมีชนิดเดียวกัน ดังนั้น assertSame(string3, string4) จะส่งคืนค่า จริง.

  1. assertNotSame(string1, string3);

ฟังก์ชัน “assertNotSame()” ใช้สำหรับตรวจสอบว่าอ็อบเจ็กต์ทั้งสองไม่ได้อ้างอิงถึงอ็อบเจ็กต์เดียวกัน เนื่องจาก string1=”Junit” และ string3=”test” ดังนั้น string1 และ string3 จึงมีชนิดข้อมูลต่างกัน ดังนั้น assertNotSame(string1, string3) จะส่งคืนค่าว่าง จริง.

  1. assertNotNull(string1);

ฟังก์ชัน “assertNotNull()” ใช้สำหรับตรวจสอบว่าอ็อบเจ็กต์นั้นไม่ใช่ค่าว่าง (null) เนื่องจาก string1=”Junit” ซึ่งเป็นค่าที่ไม่ใช่ค่าว่าง ดังนั้น assertNotNull(string1) จะส่งคืนค่าว่าง จริง.

  1. assertNull(string5);

ฟังก์ชัน “assertNull()” ใช้สำหรับตรวจสอบว่าอ็อบเจ็กต์เป็นค่าว่างหรือไม่ เนื่องจาก string5=null ซึ่งเป็นค่าว่าง ดังนั้น assertNull(string5) จะส่งคืนค่าว่าง จริง.

  1. assertTrue(variable1 < variable2);

ฟังก์ชัน “assertTrue()” ใช้สำหรับตรวจสอบว่าเงื่อนไขเป็นจริงหรือไม่ เนื่องจาก variable1=1 และ variable2=2 ซึ่งแสดงว่าเงื่อนไข variable1 < variable2 เป็นจริง ดังนั้น assertTrue(variable1 < variable2) จะส่งคืนค่า จริง.

  1. assertArrayEquals (airthematicArrary1, airethematicArrary2);

ฟังก์ชัน “assertArrayEquals()” ใช้สำหรับตรวจสอบว่าอาร์เรย์ที่คาดหวังและอาร์เรย์ที่ได้นั้นเท่ากันหรือไม่ ชนิดของอาร์เรย์อาจเป็น int, long, short, char, byte หรือ java.lang.Object เนื่องจาก airethematicArrary1 = { 1, 2, 3 } และ airethematicArrary2 = { 1, 2, 3 } ซึ่งแสดงว่าอาร์เรย์ทั้งสองเท่ากัน ดังนั้น assertArrayEquals(airethematicArrary1, airethematicArrary2) จะส่งคืนค่า จริง.

เนื่องจากข้อความยืนยันทั้งเจ็ดข้อของ การทดสอบ Junit4AssertionTest.java หากคลาสนี้ส่งค่า true กลับมา เมื่อคุณรันคำสั่ง assert สำหรับการทดสอบ คลาสจะแสดงผลว่าการทดสอบสำเร็จ (ดูผลลัพธ์ด้านล่าง)

ขั้นตอน 4) คลิกขวาที่ไฟล์ Junit4AssertionTest.java แล้วคลิก Run As -> JUnit- คุณจะเห็นผลลัพธ์ตามที่ระบุด้านล่าง:

JUnit ยืนยันตัวอย่าง

ผลลัพธ์ข้างต้นแสดงให้เห็นว่าการทดสอบประสบความสำเร็จตามที่คาดไว้

คำถามที่พบบ่อย

ใช่แล้ว ผู้ช่วย AI สามารถสร้างคำสั่ง assertEquals, assertTrue และคำสั่งตรวจสอบอื่นๆ จากพฤติกรรมที่คาดหวังของเมธอดได้ อย่างไรก็ตาม คุณควรตรวจสอบค่าที่คาดหวังและกรณีพิเศษต่างๆ เพื่อให้แน่ใจว่าการทดสอบนั้นมีความหมาย

ใช่แล้ว AI สามารถแนะนำการใช้ assertEquals แทน assertSame หรือ assertArrayEquals ได้ ขึ้นอยู่กับสิ่งที่คุณกำลังเปรียบเทียบ ซึ่งจะช่วยลดข้อผิดพลาดทั่วไป เช่น การตรวจสอบการอ้างอิงในขณะที่คุณต้องการเปรียบเทียบค่า

assertEquals ตรวจสอบความเท่าเทียมกันของค่าโดยใช้เมธอด equals() assertSame ตรวจสอบว่าการอ้างอิงสองรายการชี้ไปยังวัตถุเดียวกันในหน่วยความจำหรือไม่ วัตถุสองรายการที่มีค่าเท่ากันอาจทำให้ assertSame ล้มเหลวได้

เมื่อการยืนยันล้มเหลว JUnit จะแสดงข้อผิดพลาด AssertionError ทำเครื่องหมายว่าการทดสอบล้มเหลว และรายงานข้อความเพิ่มเติม (ถ้ามี) พร้อมกับค่าที่คาดหวังและค่าจริง เพื่อช่วยคุณในการแก้ไขข้อบกพร่องของการทดสอบ

สรุปโพสต์นี้ด้วย: