Junit Assert & AssertEquals مع مثال

⚡ ملخص ذكي

JUnit تُحدد الدالتان Assert و AssertEquals حالة نجاح أو فشل حالة الاختبار من خلال مقارنة القيم المتوقعة بالقيم الفعلية. يشرح هذا المورد دوال التأكيد التي توفرها مكتبة org.junit.Assert، بما في ذلك تأكيدات القيم المنطقية، والقيم الفارغة، والهوية، والمساواة، والمصفوفات، مع مثال عملي كامل.

  • ✅ الغرض: تقوم طرق التأكيد من org.junit.Assert بالتحقق من الشروط واكتشاف حالات فشل الاختبار.
  • 🔢 أنواع الطرق: تغطي تأكيدات Boolean و null و identity و equals و array-equals و fail-message عمليات التحقق الشائعة.
  • 🟰 assertEquals: يقارن القيم باستخدام دالة equals()، ثم يقوم بالتغليف.ping تحويل العناصر الأولية إلى كائنات أولاً.
  • 🔬 النقطة العائمة: يلزم وجود هامش خطأ دلتا عند مقارنة قيم الفاصلة العائمة أو القيم المزدوجة.
  • 🧪 على سبيل المثال: يُظهر كل من فئة الاختبار وبرنامج التشغيل كل عبارة تأكيد رئيسية تُرجع القيمة "صحيح".

JUnit Assert و AssertEquals

ما هو Junit Assert؟

تُعدّ دالة Assert طريقةً مفيدةً لتحديد حالة نجاح أو فشل حالة اختبار. وتُوفّر هذه الدوال بواسطة الفئة org.junit.Assert، التي ترث من الفئة java.lang.Object.

توجد أنواع مختلفة من التأكيدات، مثل التأكيدات المنطقية، والتأكيدات الفارغة، والتأكيدات المتطابقة، وما إلى ذلك.

JUnit يوفر فئة تسمى Assert، والتي توفر مجموعة من أساليب التأكيد المفيدة في كتابة حالات الاختبار واكتشاف حالات فشل الاختبار.

يتم توفير أساليب التأكيد من قبل الفصل org.junit.تأكيد، مما يوسع نطاق java.lang.Object فئة.

JUnit تأكيد الأساليب

منطقية

إذا كنت ترغب في اختبار الشروط المنطقية (صواب أو خطأ)، يمكنك استخدام طرق التأكيد التالية:

  1. تأكيد صحيح (شرط)
  2. تأكيد خطأ (شرط)

هنا الشرط هو قيمة منطقية.

كائن فارغ

إذا كنت تريد التحقق من القيمة الأولية لكائن/متغير، فلديك الطرق التالية:

  1. تأكيدNull(كائن)
  2. تأكيدNotNull(كائن)

الكائن هنا هو Java موضوع، على سبيل المثال AssureNull(actual);

مطابق

إذا كنت ترغب في التحقق مما إذا كانت الكائنات متطابقة (أي مقارنة مرجعين لنفس الشيء) Java كائن) أو مختلف:

  1. assertSame(expected, actual) — ستُرجع القيمة "صحيح" إذا المتوقع == الفعلي.
  2. AssuredNotSame (متوقع، فعلي)

تأكيد يساوي

إذا كنت ترغب في اختبار تساوي كائنين، فلديك الطريقة التالية:

  • التأكيد على المساواة (المتوقع، الفعلي)

سيعود صحيحا إذا المتوقع يساوي (الفعلي) إرجاع صحيح.

تأكيد صفيف يساوي

إذا كنت ترغب في اختبار تساوي المصفوفات، فلديك الطريقة التالية:

  • تأكيدArrayEquals(المتوقع، الفعلي)

يجب استخدام الطريقة المذكورة أعلاه إذا كانت المصفوفات لها نفس الطول. لكل قيمة صالحة لـ i، يمكنك التحقق من ذلك كما هو موضح أدناه:

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

رسالة فشل

إذا كنت تريد رمي أي خطأ في التأكيد، لديك يفشل()، وهو ما يؤدي دائماً إلى نتيجة سلبية.

  • فشل (الرسالة)؛

يمكنك استخدام طريقة تأكيد مع إضافة خيط المعامل الأول. ستُضاف هذه السلسلة إلى رسالة الخطأ في حال فشل التأكيد. على سبيل المثال، فشل (رسالة) يمكن كتابتها على النحو التالي:

  • assertEquals(message, expected, actual)
#1 الأفضل بشكل عاماختبار التطبيق العالمي
9.8/ 10
★ ★ ★ ★ ★
احصل على عرض تجريبي مجاني
PractiTest
9.5/ 10
★ ★ ★ ★ ★
قم بزيارة : PractiTest
Testiny
9.3/ 10
★ ★ ★ ★ ★
قم بزيارة : Testiny
أفضل من أجلاختبار الجمهور وضمان الجودةإدارة الاختبارفرق ضمان الجودة الصغيرة والمتوسطة
ميزة رئيسية✓اختبار التكامل مع جهات خارجية✓إدارة الاختبارات المركزية✓حالات الاختبار اليدوية والآلية
آلية الربط✓جيرا، Slack, TestRail✓جيرا، Jenkins, Slack✓Jira، GitHub، GitLab
تجربة مجانيّةالتجريب المجانيشنومكس يوم التجربة المجانيةالتجريب المجاني
احصل على عرض تجريبي مجانيقم بزيارة : PractiTestقم بزيارة : Testiny

JUnit أكد

لديك assertEquals(a, b)، والذي يعتمد على يساوي () طريقة فئة الكائن.

  • هنا سيتم تقييمه أ. يساوي (ب).
  • هنا يتم استخدام الفصل قيد الاختبار لتحديد علاقة المساواة المناسبة.
  • إذا لم يتجاوز الفصل يساوي () طريقة هدف سيحصل هذا الصنف على السلوك الافتراضي لـ يساوي () الطريقة، أي هوية الكائن.

If a و b هي البدائيات مثل بايت, مادبا, منطقيةإلخ، ثم سيتم تنفيذ ما يلي لـ assertEquals(a, b):

a و b سيتم تحويله إلى نوع كائن المجمع المكافئ (بايت، عدد صحيح، قيمة منطقيةالخ)، وبعد ذلك أ. يساوي (ب) سيتم تقييمها.

على سبيل المثال، لنفترض أن السلاسل النصية المذكورة أدناه لها نفس القيم؛ دعونا نختبر ذلك باستخدام assertEquals:

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

ستُرجع عبارة التأكيد أعلاه القيمة "صحيح" لأن obj1.equals(obj2) تُرجع القيمة "صحيح".

تأكيدات النقطة العائمة

عندما تريد مقارنة أنواع البيانات ذات الفاصلة العائمة (مثلًا، مضاعفة or الطفوأنت بحاجة إلى مُعامل إضافي مطلوب، دلتا، لتجنب مشاكل أخطاء التقريب أثناء إجراء مقارنات الفاصلة العائمة.

يتم تقييم التأكيد على النحو المبين أدناه:

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

فمثلا:

assertEquals(aDoubleالقيمة، أخرىDoubleالقيمة، 0.001)

JUnit تأكيد المثال

يوضح المثال التالي كيفية التحقق من شرط باستخدام JUnit تأكيد الأساليب.

لنقم بإنشاء فئة اختبار بسيطة باسم برنامج Junit4AssertionTest.java وفئة عداء الاختبار TestRunner.java.

ستقوم بإنشاء بعض المتغيرات وعبارات التأكيد المهمة في JUnit.

في هذا المثال، ستقوم بتنفيذ فئة الاختبار الخاصة بنا باستخدام TestRunner.java.

الخطوة 1) لنقم بإنشاء فئة تغطي جميع طرق عبارات التأكيد المهمة في 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) لنحلل الناتج المتوقع خطوة بخطوة. لننظر في جميع عبارات التأكيد واحدة تلو الأخرى:

  1. assertEquals(string1, string2);

الآن، قارن السلسلة الأولى (string1=”Junit”) مع السلسلة الثانية (string2=”Junit”) باستخدام دالة equals الخاصة بفئة Object. استبدل دالة assertEquals بدالة java.lang.Object.equals().

string1.equals(string2) => تُرجع القيمة true

لذا فإن assertEquals(string1, string2) ستُرجع صحيح.

  1. تأكيدSame(string3, string4);

تُستخدم الدالة `assertSame()` للتحقق من أن الكائنين يشيران إلى نفس الكائن. بما أن `string3` و`string4` من النوع نفسه، فإن `assertSame(string3, string4)` ستُرجع قيمة منطقية `true`. صحيح.

  1. AssureNotSame(string1, string3);

تتمثل وظيفة "assertNotSame()" في التحقق من أن الكائنين لا يشيران إلى نفس الكائن. بما أن string1=”Junit” و string3=”test”، فإن كلاً من string1 و string3 من نوعين مختلفين، لذا فإن assertNotSame(string1, string3) ستُرجع قيمة خاطئة. صحيح.

  1. AssureNotNull(string1);

تتمثل وظيفة "assertNotNull()" في التحقق من أن الكائن ليس فارغًا (null). وبما أن string1 = "Junit"، وهي قيمة غير فارغة، فإن assertNotNull(string1) ستُرجع قيمة فارغة. صحيح.

  1. تأكيدNull(string5);

تُستخدم الدالة "assertNull()" للتحقق من أن الكائن يساوي قيمة فارغة (null). وبما أن string5 = null، وهي قيمة فارغة، فإن assertNull(string5) ستُرجع قيمة فارغة. صحيح.

  1. assertTrue(variable1 < variableable2);

تُستخدم الدالة "assertTrue()" للتحقق من صحة شرط معين. بما أن المتغير الأول يساوي 1 والمتغير الثاني يساوي 2، مما يدل على أن الشرط "المتغير الأول < المتغير الثاني" صحيح، فإن الدالة assertTrue(المتغير الأول < المتغير الثاني) ستُرجع قيمة صحيحة. صحيح.

  1. AssurerArrayEquals(airethematicArrary1, airethematicArrary2);

تُستخدم الدالة `assertArrayEquals()` للتحقق من تساوي المصفوفة المتوقعة مع المصفوفة الناتجة. قد يكون نوع المصفوفة `int` أو `long` أو `short` أو `char` أو `byte` أو `java.lang.Object`. بما أن `airethematicArrary1 = { 1, 2, 3 }` و`airethematicArrary2 = { 1, 2, 3 }`، مما يدل على تساوي المصفوفتين، فإن `assertArrayEquals(airethematicArrary1, airethematicArrary2)` ستُرجع `true`. صحيح.

بما أن جميع عبارات التأكيد السبعة لـ برنامج Junit4AssertionTest.java عند تنفيذ فئة الاختبار assert، فإنها ستعيد نتيجة اختبار ناجحة (انظر المخرجات أدناه).

الخطوة 4) انقر بزر الماوس الأيمن على ملف Junit4AssertionTest.java ثم انقر على تشغيل كـ JUnit. سترى الإخراج كما هو موضح أدناه:

JUnit تأكيد المثال

تُظهر المخرجات أعلاه نتيجة اختبار ناجحة كما هو متوقع.

الأسئلة الشائعة

نعم. يمكن للمساعدين المدعومين بالذكاء الاصطناعي إنتاج تأكيدات مثل assertEquals و assertTrue وغيرها من التأكيدات بناءً على السلوك المتوقع للدالة. مع ذلك، ينبغي عليك مراجعة القيم المتوقعة والحالات الشاذة للتأكد من جدوى الاختبارات.

نعم. يمكن للذكاء الاصطناعي اقتراح استخدام assertEquals بدلاً من assertSame أو assertArrayEquals بناءً على ما تقارنه. هذا يقلل من الأخطاء الشائعة، مثل التحقق من المراجع عندما كنت تنوي مقارنة القيم.

تتحقق الدالة assertEquals من تساوي القيم باستخدام الدالة equals(). أما الدالة assertSame فتتحقق من أن مرجعين يشيران إلى نفس الكائن تمامًا في الذاكرة. قد تفشل الدالة assertSame في حالة وجود كائنين متساويين في القيمة.

عندما تفشل إحدى الفرضيات، JUnit يقوم برمي خطأ AssertionError، ويضع علامة على الاختبار بأنه فاشل، ويبلغ عن الرسالة الاختيارية بالإضافة إلى القيم المتوقعة والفعلية لمساعدتك في تصحيح الاختبار.

تلخيص هذه التدوينة بـ: