"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > وهمية مقابل كعب: فهم الاختلافات الرئيسية

وهمية مقابل كعب: فهم الاختلافات الرئيسية

تم النشر بتاريخ 2024-11-07
تصفح:663

Mock vs Stub: Understanding the Key Differences
في اختبار البرمجيات، يعتبر mock vs stub نوعين شائعين من اختبارات الاختبار المزدوجة المستخدمة لمحاكاة التبعيات. فهي تساعد في عزل سلوك أحد المكونات عن طريق استبدال التبعيات الحقيقية ببدائل خاضعة للرقابة أثناء الاختبار. في حين أن كلا من النماذج والنماذج تخدم أغراضًا مماثلة، إلا أنها تستخدم بشكل مختلف بناءً على نوع سيناريو الاختبار.
تتعمق هذه المقالة في الاختلافات الرئيسية بين النماذج والنماذج وحالات استخدامها ومتى يتم استخدام كل منها في استراتيجية الاختبار الخاصة بك.

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

ما هو كعب الروتين؟
كعب الروتين هو اختبار مزدوج يُرجع بيانات محددة مسبقًا عند استدعائها بواسطة المكون قيد الاختبار. يتم استخدامه عادةً عندما يتطلب المكون الذي يتم اختباره إدخالاً من التبعية، ولكن السلوك الفعلي للتبعية لا علاقة له بنتيجة الاختبار. توفر Stubs استجابات خاضعة للتحكم، مما يسمح لك بالتركيز فقط على المنطق الموجود داخل المكون.

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

const paymentGatewayStub = {
  processPayment: () => "payment successful"
};

function processOrder(paymentService) {
  const result = paymentService.processPayment();
  return result === "payment successful" ? "Order Complete" : "Order Failed";
}

// Test
console.log(processOrder(paymentGatewayStub));  // Output: "Order Complete"

في هذه الحالة، يضمن كعب الروتين أن الخدمة الخارجية تُرجع دائمًا المخرجات المتوقعة، مما يسهل اختبار المنطق الداخلي.

ما هو الوهم؟
النموذج الوهمي عبارة عن اختبار مزدوج لا يوفر بيانات مزيفة فحسب، بل يتحقق أيضًا من التفاعلات بين المكونات. تساعد المحاكاة على التأكد من استدعاء الأساليب الصحيحة باستخدام المعلمات الصحيحة وأن التسلسل المطلوب للأحداث يحدث أثناء التنفيذ. يتم استخدامها عادةً عندما يكون سلوك أو تفاعل المكون مهمًا للاختبار.
مثال على المحاكاة:
باستخدام نفس مثال الدفع، لنفترض أنك تريد التحقق من استدعاء طريقةprocessPayment() مرة واحدة بالضبط أثناء معالجة الطلب.

const paymentGatewayMock = {
  processPayment: jest.fn().mockReturnValue("payment successful")
};

function processOrder(paymentService) {
  paymentService.processPayment();  
}

// Test
processOrder(paymentGatewayMock);
expect(paymentGatewayMock.processPayment).toHaveBeenCalledTimes(1);

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

متى تستخدم كعب الروتين
• اختبار المنطق البسيط: استخدم كعب الروتين عندما تحتاج فقط إلى التحكم في مخرجات التبعية.
• الاختبارات المستندة إلى البيانات: إذا كان التركيز على اختبار كيفية تصرف المكون الخاص بك مع بيانات محددة، فإن بذرة تكون أكثر ملاءمة.
• مثال لحالة الاستخدام: إذا كنت تختبر ميزة تسجيل دخول تحتاج إلى بيانات مستخدم من قاعدة بيانات، فاستخدم كعب روتين لإرجاع مستخدم وهمي دون الاتصال بقاعدة البيانات الحقيقية.
متى تستخدم الوهمية
• الاختبار القائم على التفاعل: إذا كان التركيز على ضمان استدعاء الأساليب الصحيحة باستخدام المعلمات الصحيحة، فاستخدم نموذجًا وهميًا.
• اختبار التفاعلات المعقدة: تعتبر النماذج النموذجية مثالية للمكونات التي تتفاعل مع خدمات أو واجهات برمجة التطبيقات المتعددة.
• مثال لحالة الاستخدام: إذا كنت تختبر خدمة إرسال بريد إلكتروني، استخدم نموذجًا للتحقق من استدعاء وظيفة sendEmail() مع المستلم والرسالة المتوقعة.
هل يمكن استخدام التقليد والكعب معًا؟
نعم، في بعض الحالات، يتم استخدام النماذج والنماذج معًا في نفس الاختبار لتحقيق التحقق من صحة التفاعل والاستجابات الخاضعة للرقابة. على سبيل المثال، يمكنك استخدام كعب روتين لإرجاع بيانات محددة ونموذج وهمي للتحقق من استدعاء خدمة معينة.
إيجابيات وسلبيات المحاكاة والكعب
إيجابيات بذرة:
• بسيطة وسهلة التنفيذ
• مفيد لاختبار منطق المكونات بشكل منفصل
سلبيات بذرة:
• لا يمكن التحقق من صحة استدعاءات الطريقة أو المعلمات
• يقتصر على الاستجابات الثابتة
إيجابيات المحاكاة:
• التحقق من السلوك والتفاعلات والتسلسلات
• مفيد للسيناريوهات المعقدة ذات التبعيات المتعددة
سلبيات المحاكاة:
• يتطلب المزيد من الإعداد ويمكن أن يجعل قراءة الاختبارات أكثر صعوبة
• يمكن أن يؤدي إلى اختبارات هشة إذا لم يتم استخدامه بعناية
Mock vs Stub: أيهما يجب أن تستخدمه؟
• إذا كان الاختبار الخاص بك يعتمد على مخرجات التبعية وتريد التحكم في تلك المخرجات، فاستخدم كعب الروتين.
• إذا كنت بحاجة إلى التحقق من استدعاء طريقة ما أو التحقق من صحة التفاعلات بين المكونات، فاستخدم نسخة وهمية.
• بالنسبة لاختبار الوحدة، يتم استخدام بذرة البذور بشكل أكثر شيوعًا نظرًا لأن التركيز ينصب على اختبار المنطق الداخلي.
• بالنسبة لاختبار التكامل، تعد النماذج النموذجية أكثر فائدة عند التحقق من كيفية تفاعل الأجزاء المختلفة من النظام.

خاتمة
تلعب كل من النماذج والنماذج أدوارًا أساسية في استراتيجيات الاختبار، لكن كل منها يخدم غرضًا مختلفًا. بينما تتحكم البذرة في البيانات التي تُرجعها التبعية، فإن النماذج المقلدة تضمن حدوث التفاعلات الصحيحة بين المكونات. إن فهم متى وكيف يتم استخدام كل منها يمكن أن يحسن جودة اختباراتك، مما يؤدي إلى برامج أكثر موثوقية. من خلال تطبيق النماذج والنماذج بشكل صحيح، يمكن للفرق تقليل الأخطاء وتسريع التطوير وإنشاء إستراتيجيات اختبار أفضل لكل من اختبارات الوحدة والتكامل.

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/keploy/mock-vs-stub-understanding-the-key-differences-1e36?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3