"الكود بدون اختبارات هو تراث قديم": لماذا يجب أن تبدأ اليوم
\n\nتخيل أنك كتبت تطبيقًا بلغة Java. إنه يعمل. لكنك تخشى تغيير أي شيء، لأن خطوة واحدة خاطئة قد تؤدي إلى انهيار كل شيء. هل هذا مألوف؟ مرحبًا بك في عالم حيث اختبار Java ليس ترفًا، بل مهارة أساسية للبقاء.
\n\nكثير من المبرمجين المبتدئين يؤجلون الاختبارات "لوقت لاحق". يقولون: دعني أتعلم كتابة الكود أولاً، ثم سأهتم بالاختبارات. لكن الحقيقة أن اختبارات الوحدة في Java ليست عبئًا إضافيًا، بل هي حبل الأمان الخاص بك. فهي تجبرك على كتابة كود أفضل وأكثر نمطية ووضوحًا. نعم، وأرباب العمل يقدرون بشدة المطورين الذين يجيدون تغطية الكود بالاختبارات.
\n\nفي هذه المقالة، سنشرح من أين تبدأ اختبار Java كمبتدئ. ستتعرف على الأدوات الأساسية - JUnit وMockito، وستكتب أول اختباراتك، وستفهم كيف لا تقع في فخ "الاختبار من أجل الاختبار". هيا بنا!
\n\nالخطوة 1: إعداد البيئة - أول منصة اختبار لك
\n\nقبل كتابة الاختبارات، تحتاج إلى تجهيز البيئة. الخبر السار: لأتمتة اختبارات Java لا تحتاج إلى أي شيء خارق. كل ما لديك بالفعل - JDK وبيئة التطوير (IntelliJ IDEA أو Eclipse) - يكفي.
\n\nMaven أو Gradle - اختر أداة البناء
\n\nمشاريع Java الحديثة نادرًا ما تستغني عن نظام بناء. سنستخدم Maven - فهو المعيار الفعلي لمعظم المشاريع. إليك ملف pom.xml الأدنى مع التبعيات اللازمة للاختبار:
<dependencies>\n <!-- JUnit 5 - الإطار الرئيسي للاختبارات -->\n <dependency>\n <groupId>org.junit.jupiter</groupId>\n <artifactId>junit-jupiter-api</artifactId>\n <version>5.10.0</version>\n <scope>test</scope>\n </dependency>\n \n <!-- Mockito لإنشاء كائنات وهمية (mock objects) -->\n <dependency>\n <groupId>org.mockito</groupId>\n <artifactId>mockito-core</artifactId>\n <version>5.6.0</version>\n <scope>test</scope>\n </dependency>\n</dependencies>\n\nلاحظ <scope>test</scope> - هذه المكتبات لن تصل إلى البناء النهائي للتطبيق، فهي مطلوبة فقط لتشغيل الاختبارات.
الخطوة 2: JUnit - أول اختبار حقيقي لك
\n\nJUnit هو الأساس الذي يُبنى عليه كل اختبار Java. باستخدامه، تكتب اختبارات الوحدة: تتحقق من عمل دالة أو فصل برمجي واحد بشكل منعزل.
\n\nكتابة أول اختبار
\n\nلنفترض أن لدينا آلة حاسبة بسيطة:
\n\npublic class Calculator {\n public int add(int a, int b) {\n return a + b;\n }\n \n public int divide(int a, int b) {\n if (b == 0) {\n throw new IllegalArgumentException("لا يمكن القسمة على صفر!");\n }\n return a / b;\n }\n}\n\nالآن لنكتب اختبارًا لها. أنشئ فصلًا في المجلد src/test/java:
import org.junit.jupiter.api.Test;\nimport static org.junit.jupiter.api.Assertions.*;\n\nclass CalculatorTest {\n \n private final Calculator calculator = new Calculator();\n \n @Test\n void testAdd() {\n // Arrange (التحضير)\n int a = 2;\n int b = 3;\n \n // Act (التنفيذ)\n int result = calculator.add(a, b);\n \n // Assert (التحقق)\n assertEquals(5, result, "2 + 3 يجب أن يساوي 5");\n }\n \n @Test\n void testDivideByZero() {\n // نتحقق من أن الدالة ترمي استثناء\n assertThrows(IllegalArgumentException.class, \n () -> calculator.divide(10, 0));\n }\n}\n\nشغّل الاختبار - الشريط الأخضر في بيئة التطوير سيخبرك أن كل شيء يعمل. تهانينا، لقد اتخذت للتو خطوتك الأولى في اختبار الوحدة في Java.