AssertJ لجافا: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

AssertJ لجافا: الدليل الشامل لـ Fluent Assertions

1. ما هي AssertJ ولماذا تحتاجها؟

AssertJ هي مكتبة قوية من نوع fluent-assertions (التأكيدات المتدفقة) للغة جافا، مصممة لكتابة اختبارات مقروءة ومعبرة وموثقة ذاتياً. على عكس JUnit أو TestNG التقليدية التي توفر دوالاً أساسية فقط مثل assertEquals(a, b)، تقدم AssertJ واجهة برمجية غنية بسلسلة من الاستدعاءات، مما يجعل كود الاختبار يبدو كاللغة الطبيعية. على سبيل المثال، بدلاً من كتابة assertTrue(list.contains("foo"))، تكتب assertThat(list).contains("foo").

لماذا تحتاجها؟ أولاً، تعمل AssertJ على تحسين قابلية قراءة الاختبارات بشكل كبير. عندما يرى المطور assertThat(result).isNotNull().hasSize(5).contains("expected")، يفهم فوراً ما يتم التحقق منه: النتيجة ليست فارغة، حجمها يساوي 5، وتحتوي على النص "expected". ثانياً، توفر AssertJ رسائل خطأ مفصلة. بدلاً من الرسالة المملة "expected true but was false"، ستحصل على "Expected list to contain 'foo' but could not find it in [bar, baz]". ثالثاً، تدعم المكتبة العديد من أنواع البيانات: المجموعات، النصوص، الأرقام، التواريخ، الملفات، الاستثناءات، وحتى الكائنات المخصصة.

تكون AssertJ مفيدة بشكل خاص في المشاريع التي تتطلب صيانة قاعدة اختبارات قوية. بفضل واجهة fluent API، تصبح الاختبارات أقل عرضة للكسر عند إعادة الهيكلة، حيث يسهل تعديل سلاسل الدوال. المكتبة في تطور مستمر، ولها توثيق ممتاز، وتستخدم على نطاق واسع في الصناعة (Spring، Hibernate، Netflix وغيرها).

2. التثبيت

يتم توزيع AssertJ عبر Maven Central. لاستخدامها في مشروعك، أضف التبعية إلى ملف pom.xml (Maven) أو build.gradle (Gradle).

Maven

<dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>3.25.3</version> <!-- تحقق من أحدث إصدار على Maven Central -->
    <scope>test</scope>
</dependency>

Gradle

testImplementation 'org.assertj:assertj-core:3.25.3'

إذا كنت تستخدم JUnit 5، فلا حاجة لتبعيات إضافية. تعمل AssertJ أيضاً مع JUnit 4 دون مشاكل. تأكد من توافق إصدار AssertJ مع إصدار جافا لديك (الإصدار 3.x يتطلب جافا 8 أو أحدث).

3. البداية السريعة — مثال عملي بسيط

بعد إضافة التبعية، يمكنك البدء فوراً في استخدام AssertJ. الدالة الأساسية هي assertThat()، والتي تأخذ كائناً وتعيد كائن التأكيد المناسب.

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;

public class QuickStartTest {

    @Test
    void testSimpleAssertion() {
        String name = "AssertJ";
        
        // تأكيد أساسي
        assertThat(name)
            .isNotNull()
            .isNotEmpty()
            .startsWith("Ass")
            .endsWith("J")
            .hasSize(7);
        
        // التحقق من الأرقام
        int number = 42;
        assertThat(number)
            .isPositive()
            .isGreaterThan(40)
            .isLessThan(50);
        
        // التحقق من المجموعات
        var list = java.util.List.of("a", "b", "c");
        assertThat(list)
            .hasSize(3)
            .contains("a", "b")
            .doesNotContain("z");
    }
}

يوضح هذا المثال الفكرة الأساسية: سلسلة من الدوال، كل منها يعيد نفس كائن التأكيد، مما يسمح بكتابة فحوصات متسلسلة. إذا فشل أي تأكيد، يفشل الاختبار مع رسالة واضحة.

4. الدوال/الكلاسات الأساسية

توفر AssertJ مئات الدوال. فيما يلي 8 من الأكثر استخداماً مع التوقيع والشرح والأمثلة.

4.1. isEqualTo

توصيات