اختبار التكامل في Java مع Docker: دليل شامل

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

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

ابدأ الدورة

اختبار التكامل لتطبيقات جافا باستخدام Docker



تطوير جافا الحديث لا يمكن تصوره دون اختبارات عالية الجودة. ومع ذلك، غالبًا ما تكون اختبارات الوحدة غير قادرة على تحديد المشكلات التي تنشأ عندما تتفاعل المكونات مع قواعد البيانات الحقيقية، أو قوائم انتظار الرسائل، أو واجهات برمجة التطبيقات الخارجية. هنا يأتي اختبار التكامل للإنقاذ، و Docker يجعل هذه العملية بسيطة وقابلة للتكرار ومعزولة. في هذه المقالة، سنستكشف كيفية استخدام Docker بشكل فعال لاختبار التكامل لتطبيقات جافا باستخدام مكتبة Testcontainers و Docker Compose.



لماذا يغير Docker قواعد اللعبة في اختبار التكامل؟



النهج التقليدي لاختبار التكامل غالبًا ما يتطلب تثبيت وتهيئة جميع التبعيات (قواعد البيانات، وسطاء الرسائل) على جهاز المطور المحلي أو على خادم CI. هذا يؤدي إلى عدد من المشكلات:



  • عدم استقرار البيئة: إصدارات مختلفة من أنظمة إدارة قواعد البيانات، تعارضات المنافذ، الاختلافات بين بيئة التطوير وبيئة الإنتاج.
  • تعقيد إعداد CI/CD: الحاجة إلى تثبيت وتكوين الخدمات يدويًا في خط الأنابيب.
  • تلوث البيانات: يمكن أن تبقى بيانات الاختبار في قاعدة البيانات المحلية، مما يؤثر على عمليات التشغيل اللاحقة.
  • التوازي: تشغيل الاختبارات في وقت واحد على جهاز واحد يمكن أن يؤدي إلى تعارضات.


Docker يحل هذه المشكلات من خلال توفير حاويات خفيفة الوزن ومعزولة ومؤقتة. كل اختبار (أو مجموعة اختبارات) يمكنه تشغيل مثيل خاص به من PostgreSQL أو Redis أو Kafka، وبعد انتهاء الاختبار، يتم تدميره. هذا يضمن نتائج نظيفة وقابلة للتكرار.



إعداد المشروع: Testcontainers مقابل Docker Compose



هناك طريقتان رئيسيتان لدمج Docker في اختبارات جافا. دعنا ننظر إلى كلتيهما.



1. Testcontainers: مكتبة لإدارة الحاويات من الكود



Testcontainers هي مكتبة جافا تتيح لك إدارة دورة حياة حاويات Docker مباشرة من اختباراتك. وهي المعيار الفعلي لاختبار التكامل في نظام Spring البيئي وما بعده.



المزايا:

  • تحكم برمجي: يتم تشغيل الحاويات وإيقافها تلقائيًا.
  • دعم الخدمات الشائعة "جاهزة للاستخدام" (GenericContainer، PostgreSQLContainer، KafkaContainer، إلخ).
  • اختيار تلقائي للمنافذ الحرة (يتجنب التعارضات).
  • مثالي لاختبارات التكامل الوحدوية.


مثال: اختبار وحدة تحكم REST مع PostgreSQL



أضف التبعية إلى pom.xml الخاص بك (Maven):



<dependency>    <groupId>org.testcontainers</groupId>    <artifactId>testcontainers</artifactId>    <version>1.19.3</version>    <scope>test</scope></dependency><dependency>    <groupId>org.testcontainers</groupId>    <artifactId>postgresql</artifactId>    <version>1.19.3</version>    <scope>test</scope></dependency>


الآن دعنا نكتب اختبارًا لتطبيق Spring Boot الذي يعمل مع PostgreSQL:



import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.boot.test.web.client.TestRestTemplate;import org.springframework.http.ResponseEntity;import org.testcontainers.containers.PostgreSQLContainer;import org.testcontainers.junit.jupiter.Container;import org.testcontainers.junit.jupiter.Testcontainers;

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnviron

المدونات

توصيات الكتب