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

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

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

ابدأ الدورة

WireMock لجافا: الدليل الشامل لخادم HTTP Mock

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

WireMock هي مكتبة قوية للغة جافا (ولغات أخرى عبر خادم مستقل) تتيح لك إنشاء خوادم HTTP وهمية (Mock Servers) لاختبار التطبيقات. ببساطة، هو محاكي لخدمة HTTP حقيقية (API، REST، SOAP) يمكنك تهيئته ليعيد ردودًا محددة مسبقًا على طلبات معينة. هذه الأداة لا غنى عنها في ترسانة أي مطور أو مختبر يعمل مع بنية الخدمات المصغرة أو أي نظام يعتمد على خدمات HTTP خارجية.

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

  • الاختبار في عزلة: تختبر فقط كودك الخاص، دون الاعتماد على توفر واستقرار الخدمات الخارجية.
  • محاكاة السيناريوهات النادرة: يمكنك بسهولة جعل الخادم الوهمي يعيد أخطاء 500، مهلات زمنية، ردودًا فارغة، أو ترويسات محددة - وهي أمور يصعب إعادة إنتاجها مع خدمة حقيقية.
  • تسريع الاختبارات: الخادم الوهمي يستجيب في أجزاء من الثانية، بينما قد تستغرق الخدمة الحقيقية ثوانٍ.
  • تطوير متوازي: بينما لا يزال فريق الباك إند لم ينفذ واجهة API بعد، يمكن لفريق الفرونت إند البدء في كتابة واختبار كودهم باستخدام WireMock.

يعمل WireMock كخادم HTTP كامل (يعتمد على Jetty)، يتم تشغيله داخل اختبارك أو كعملية منفصلة. يعترض طلبات HTTP، ويقارنها بالقواعد التي قمت بإعدادها (Stubs)، ثم يعيد الرد المناسب. تدعم المكتبة التسجيل وإعادة التشغيل (Record/Playback)، التحقق من الحالة (Verify)، العمل مع القوالب (Handlebars)، محاكاة التأخير، والكثير غير ذلك.

2. التثبيت

يتم توزيع WireMock لجافا عبر Maven Central. أضف التبعية التالية إلى ملف pom.xml (لـ Maven) أو build.gradle (لـ Gradle).

Maven (pom.xml):

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

Gradle (build.gradle):

testImplementation 'org.wiremock:wiremock:3.9.1'

ملاحظة مهمة: بدءًا من الإصدار 3.x، يتطلب WireMock Java 11 أو أحدث. إذا كنت تستخدم Java 8، فستحتاج إلى استخدام الإصدار 2.x (مثل 2.35.1)، ولكن يُنصح بشدة بالترقية إلى Java 11+.

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

لنقم بإنشاء اختبار بسيط يشغل WireMock، ويُعدّ استجابة وهمية لطلب GET إلى /api/hello، ويتحقق من أن العميل يتلقى الرد المتوقع.

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

توصيات