PHPStan
PHPUnit
يوفر هذا الملحق الميزات التالية:
تقوم أساليب createMock()
و getMockForAbstractClass()
و getMockFromWsdl()
بإرجاع نوع التقاطع (راجع الشرح التفصيلي لأنواع التقاطع) للكائن الوهمي والفئة التي يتم الاستهزاء بها بحيث تكون كلتا الطريقتين من الكائن الوهمي (مثل expects
) ومن الفئة التي يتم الاستهزاء بها متوفرة على الكائن.
يتم أيضًا دعم getMock()
الذي يتم استدعاؤه على MockBuilder
.
يفسر Foo|PHPUnit_Framework_MockObject_MockObject
في phpDoc بحيث ينتج عنه نوع تقاطع بدلاً من نوع اتحاد.
يحدد استدعاءات أسلوب الإنهاء المبكر لفئة PHPUnitFrameworkTestCase
لمنع أخطاء المتغيرات غير المحددة.
يحدد أنواع التعبيرات التي تم تمريرها إلى طرق assert
المختلفة مثل assertInstanceOf
، assertTrue
، assertInternalType
وما إلى ذلك.
بالاشتراك مع المستوى الرابع لـ PHPStan، فإنه يشير إلى تأكيدات صحيحة دائمًا وكاذبة دائمًا مثل assertTrue(true)
وما إلى ذلك.
ويحتوي أيضًا على هذه القواعد الصارمة الخاصة بإطار العمل (يمكن تمكينها بشكل منفصل):
تأكد من أنك لا تستخدم assertSame()
بالقيمة true
المتوقعة. يجب استخدام assertTrue()
بدلاً من ذلك.
تأكد من أنك لا تستخدم assertSame()
بقيمة false
كقيمة متوقعة. يجب استخدام assertFalse()
بدلاً من ذلك.
تأكد من أنك لا تستخدم assertSame()
بقيمة null
كقيمة متوقعة. يجب استخدام assertNull()
بدلاً من ذلك.
تأكد من أنك لا تستخدم assertSame()
مع count($variable)
كمعلمة ثانية. يجب استخدام assertCount($variable)
بدلاً من ذلك.
إذا كنت بحاجة إلى تكوين النموذج حتى بعد تعيينه لخاصية أو إعادته من إحدى الطرق، فيجب عليك إضافة PHPUnit_Framework_MockObject_MockObject
إلى phpDoc:
/** * @return Foo&PHPUnit_Framework_MockObject_MockObject */ وظيفة خاصة createFooMock() { return $this->createMock(Foo::class); }اختبار الوظيفة العامةSomething() { $fooMock = $this->createFooMock(); $fooMock->method('doFoo')->will($this->returnValue('test')); $fooMock->doFoo(); }
يرجى ملاحظة أن الصيغة الصحيحة لأنواع التقاطع هي Foo&PHPUnit_Framework_MockObject_MockObject
. Foo|PHPUnit_Framework_MockObject_MockObject
مدعوم أيضًا، ولكن فقط لأسباب النظام البيئي والإرث.
إذا تم تكوين النموذج الوهمي بالكامل وكان من المفترض أن يتم استدعاء أساليب الفئة التي تم الاستهزاء بها فقط على القيمة، فمن الجيد كتابة الفئة التي تم الاستهزاء بها فقط:
/** @var Foo */private $foo;protected function setUp() { $fooMock = $this->createMock(Foo::class); $fooMock->method('doFoo')->will($this->returnValue('test')); $this->foo = $fooMock; }اختبار الوظيفة العامةSomething() { $this->foo->doFoo(); // $this->foo->method() وexpect() لم يعد من الممكن استدعاؤها}
لاستخدام هذا الامتداد، اطلبه في Composer:
composer require --dev phpstan/phpstan-phpunit
إذا قمت أيضًا بتثبيت phpstan/extension-installer، فأنت جاهز تمامًا!
إذا كنت لا تريد استخدام phpstan/extension-installer
، فقم بتضمين Extension.neon في إعدادات PHPStan الخاصة بمشروعك:
includes: - vendor/phpstan/phpstan-phpunit/extension.neon
لإجراء فحوصات خاصة بإطار العمل، قم أيضًا بتضمين هذا الملف:
- vendor/phpstan/phpstan-phpunit/rules.neon