البرمجة

فهم الفرق بين createMock و getMockBuilder في phpUnit

فهم الفرق بين createMock و getMockBuilder في phpUnit

createMock و getMockBuilder هما طرق لإنشاء test doubles (مثيلات افتراضية) في PHPUnit، لكنهما يستخدمان أساليب مختلفة ويوفران مزايا مختلفة.

createMock($type)

createMock هي طريقة بسيطة لإنشاء test double لنوع محدد. عند استخدامها، يقوم PHPUnit تلقائيًا بإنشاء test double للنوع المحدد وإعادته لك. إليك مثال:

php
$mock = $this->createMock(MyClass::class);

هذا سينشئ test double لـ MyClass ويعيده لك للاستخدام في اختباراتك.

getMockBuilder($type)

getMockBuilder تسمح لك بتخصيص عملية إنشاء test double أكثر، باستخدام واجهة سلسلة التحكم (fluent interface). يمكنك استخدام هذا الأسلوب لتحديد سلوك معين لل test double مثل إعادة قيم محددة أو إطلاق استثناء عند استدعاء الدالة. إليك مثال:

php
$mockBuilder = $this->getMockBuilder(MyClass::class); $mockBuilder->setMethods(['myMethod']) ->setConstructorArgs([$arg1, $arg2]) ->getMock();

في هذا المثال، نستخدم getMockBuilder لتحديد الدوال التي سيحتويها test double (setMethods) والمعاملات التي يجب تمريرها للمُنشئ (setConstructorArgs) قبل أن نستدعي getMock لإنشاء ال test double.

الفرق الرئيسي

  • createMock تنتج test double بشكل سريع وبسيط، بينما getMockBuilder توفر لك تحكمًا أكبر في سلوك test double.
  • createMock للحالات التي لا تحتاج فيها إلى تخصيص متقدم، بينما getMockBuilder تستخدم عندما تحتاج إلى تحديد سلوك معين لل test double.

مثال كامل

لنفترض أن لدينا الكلاس التالي:

php
class MathOperations { public function add($a, $b) { return $a + $b; } }

ونريد اختبار دالة add باستخدام test double. إليك كيف يمكن تحقيق ذلك باستخدام createMock و getMockBuilder:

استخدام createMock:

php
class MathOperationsTest extends TestCase { public function testAdd() { $mathMock = $this->createMock(MathOperations::class); $mathMock->expects($this->once()) ->method('add') ->with(2, 3) ->willReturn(5); $result = $mathMock->add(2, 3); $this->assertEquals(5, $result); } }

استخدام getMockBuilder:

php
class MathOperationsTest extends TestCase { public function testAdd() { $mathMock = $this->getMockBuilder(MathOperations::class) ->getMock(); $mathMock->method('add') ->with(2, 3) ->willReturn(5); $result = $mathMock->add(2, 3); $this->assertEquals(5, $result); } }

تستطيع أن ترى أن getMockBuilder يوفر تحكمًا أكبر في سلوك الـ test double بينما createMock يكون أكثر سرعة في الاستخدام العادي.

المزيد من المعلومات

طبعاً، هنا بعض المعلومات الإضافية حول createMock و getMockBuilder في PHPUnit:

  1. استخدام createMock بشكل عام:

    • عند استخدام createMock, يتم إنشاء test double للفئة المحددة دون تخصيص إضافي.
    • يُفضل استخدام createMock للحالات البسيطة التي لا تتطلب تخصيص معقد لسلوك test double.
  2. استخدام getMockBuilder بشكل عام:

    • تُستخدم getMockBuilder لتخصيص إنشاء test double بشكل أكبر.
    • يمكن استخدام سلسلة التحكم (fluent interface) المقدمة من getMockBuilder لتحديد العديد من السمات لل test double مثل الدوال المزيفة والقيم التي يجب إرجاعها.
  3. التحكم في سلوك test double:

    • باستخدام getMockBuilder, يمكنك تحديد سلوك test double بدقة عن طريق استخدام setMethods لتحديد الدوال و setConstructorArgs لتحديد المعاملات التي يجب تمريرها للمُنشئ.
    • يمكنك أيضًا استخدام expects و willReturn لتحديد سلوك معين للدالة المزيفة.
  4. عدم استخدام getMockBuilder في بعض الحالات:

    • في الحالات التي لا تتطلب تخصيص معقد لسلوك test double، يمكنك استخدام createMock بسهولة دون الحاجة إلى getMockBuilder.
  5. مزايا getMockBuilder:

    • توفر getMockBuilder تحكمًا أكبر في سلوك test double، مما يسمح لك بتحديد سلوك محدد دون الحاجة إلى تغيير الكثير من الشفرة.

باختصار، يمكن استخدام createMock لإنشاء test double بسرعة وبساطة في الحالات البسيطة، بينما يمكن استخدام getMockBuilder لتخصيص إنشاء test double بشكل أكبر عند الحاجة إلى تحديد سلوك معين لل test double.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر