اختبار في Java: الأطر والأدوات للمطور

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

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

ابدأ الدورة

اختبار في Java: نظرة عامة على الأطر والأدوات



الاختبار عالي الجودة هو جزء لا يتجزأ من التطوير الاحترافي بلغة Java. بدون اختبارات آلية، يصعب الحفاظ على المشاريع الكبيرة، وإضافة ميزات جديدة، وتجنب الأخطاء التراجعية. في هذه المقالة، سنستعرض الأدوات والأطر الرئيسية لاختبار تطبيقات Java: من اختبارات الوحدات إلى فحوصات التكامل وأتمتة واجهة المستخدم.



لماذا من المهم اختبار كود Java؟

تتيح الاختبارات:

  • اكتشاف الأخطاء في المراحل المبكرة من التطوير.
  • تبسيط إعادة الهيكلة — ترى فوراً ما تعطل.
  • توثيق سلوك الكود.
  • أتمتة التحقق من التراجعات عند كل إيداع (commit).


JUnit 5 — أساس اختبار الوحدات

JUnit 5 هو المعيار الفعلي لاختبار الوحدات في Java. يتكون من ثلاث وحدات: JUnit Platform وJUnit Jupiter وJUnit Vintage. يوفر Jupiter نموذج برمجة جديد مع التعليقات التوضيحية والإضافات.



مثال أساسي لاختبار باستخدام JUnit 5:

import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;

class CalculatorTest { @Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3), "2 + 3 يجب أن يكون 5"); }}


Mockito — إنشاء الكائنات الوهمية والمحاكاة

عند الاختبار، غالباً ما نحتاج إلى عزل الفئة عن تبعياتها (قواعد البيانات، واجهات API الخارجية). يتيح Mockito إنشاء كائنات وهمية (mock) وتحديد سلوكها.



مثال على استخدام Mockito مع JUnit 5:

import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.mockito.InjectMocks;import org.mockito.Mock;import org.mockito.junit.jupiter.MockitoExtension;import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)class UserServiceTest { @Mock private UserRepository repository;

@InjectMocks private UserService service;

@Test void testFindUser() { when(repository.findById(1L)).thenReturn(new User("Alice")); User result = service.findUser(1L); assertEquals("Alice", result.getName()); verify(repository).findById(1L); }}


TestNG — بديل لـ JUnit مع إمكانيات موسعة

TestNG (Test Next Generation) هو إطار مستوحى من JUnit، لكنه يضيف دعم مجموعات الاختبار، والمعلمات، والتبعيات، والتشغيل المتوازي. يحظى بشعبية خاصة في المشاريع الكبيرة واختبار التكامل.



مثال على اختبار مع معلمات في TestNG:

import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import static org.testng.Assert.assertEquals;

public class ParamTest { @DataProvider(name = "numbers") public Object[][] data() { return new Object[][] { {1, 2, 3}, {0, 0, 0}, {-1, 1, 0} }; }

@Test(dataProvider = "numbers") public void testAdd(int a, int b, int expected) { assertEquals(a + b, expected); }}


Selenium — أتمتة واجهات الويب

لاختبار تطبيقات الويب بلغة Java (مثل تلك المبنية على Spring Boot)، غالباً ما يُستخدم Selenium WebDriver. يتيح محاكاة إجراءات المستخدم في المتصفح: النقر، إدخال النص، التحقق من العناصر.



مثال بسيط لاختبار Selenium:

import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.junit.jupiter.api.Test;

public class LoginTest { @Test public void testLoginPage() { WebDriver driver = new ChromeDriver(); driver.get("https://example.com/login"); driver.findElement(By.id("username")).sendKeys("admin"); driver.findElement(By.id("password")).sendKeys("pa

توصيات