بما أنك هنا، فمن المحتمل أنك تدرك جيدًا أن PHPUnit 8+ يتطلب أساليب قالب شائعة مثل setUp()
أو tearDown()
للحصول على إعلان نوع إرجاع void
، مما يؤدي بطبيعة الحال إلى كسر أي شيء أقل من PHP 7.1.
على الرغم من أنه ليس من المهم تحديث التعليمات البرمجية الخاصة بك تلقائيًا لاستخدام إعلان نوع الإرجاع هذا بمساعدة من أمثال PHP-CS-Fixer أو Rector، فقد يصبح الأمر مشكلة إذا كان ذلك لأسباب مؤسفة (ولكن نأمل أن تكون مربحة). ، يجب عليك التأكد من أن الكود الخاص بك يعمل تحت PHP 7.0 أو PHP 5.6، في حين أن الرغبة في استخدام أفضل العالم يمكن أن توفر لك الإصدارات الأقل حداثة من PHPUnit.
في هذه الحالة، سيكون لديك مشكلتين. أولاً، الإصدارات الأحدث من PHPUnit لا تحتوي على تأكيدات قديمة، ولكن يمكنك العثور على طريقة للتغلب على هذا، وهناك إصدار آخر، كما ذكرنا سابقًا، تتطلب الإصدارات الأحدث من PHPUnit إعلانات نوع الإرجاع void
لطرق القالب الملائمة، ثم أنت عالق بسبب إعادة الكتابة تعتبر اختبارات العمل بدون هذه الأساليب النموذجية بمثابة ألم كبير وقد تكون مستحيلة حتى. ثم تأتي هذه المكتبة الصغيرة لتنقذ يومك!
composer require --dev sanmai/phpunit-legacy-adapter:"^6.4 || ^8.2.1"
أولاً، قم بتحديث اختباراتك لتمتد من LegacyPHPUnitTestCase
بدلاً من PHPUnitFrameworkTestCase
:
- class MyTest extends PHPUnitFrameworkTestCase
+ class MyTest extends LegacyPHPUnitTestCase
بعد ذلك، عندما يتعين عليك استخدام طريقة setUp(): void
template، استخدم طريقة doSetUp()
، مع حذف جميع أنواع الإرجاع بطريقة متوافقة تمامًا مع الإصدارات السابقة.
- protected function setUp(): void
+ protected function doSetUp()
توجد بدائل مماثلة لمعظم طرق القوالب الأخرى:
- public static function setUpBeforeClass(): void
+ public static function doSetUpBeforeClass()
- public static function tearDownAfterClass(): void
+ public static function doTearDownAfterClass()
- protected function setUp(): void
+ protected function doSetUp()
- protected function tearDown(): void
+ protected function doTearDown()
- protected function assertPreConditions(): void
+ protected function doAssertPreConditions()
- protected function assertPostConditions(): void
+ protected function doAssertPostConditions()
طريقة | استبدال |
---|---|
setUpBeforeClass(): void | doSetUpBeforeClass() |
tearDownAfterClass(): void | doTearDownAfterClass() |
setUp(): void | doSetUp() |
tearDown(): void | doTearDown() |
assertPreConditions(): void | doAssertPreConditions() |
assertPostConditions(): void | doAssertPostConditions() |
ومن المرجح أن تتبع الإصدارات المستقبلية نفس النمط.
على الرغم من أن هذه المكتبة تحل الجزء الأكثر إزعاجًا من المشكلة، إلا أن هناك أجزاء أخرى لم تكن المكتبة مصممة لتغطيتها. على سبيل المثال:
assertContains
مع السلاسل النصية، بينما لا تسمح إصدارات أخرى بذلك.expectExceptionMessageRegExp
، بينما في إصدارات أخرى تُسمى نفس الطريقة expectExceptionMessageMatches
.هناك عمليات تعبئة متعددة لهذه الطرق المتغيرة (انظر أدناه)، ولكن لا ينبغي أن يكون من الصعب كتابة عمليات تعبئة متعددة مخصصة للطرق التي تحتاجها فقط. على سبيل المثال:
public function __call ( $ method , $ args )
{
if ( $ method === ' assertStringContainsString ' ) {
$ this -> assertContains (... $ args );
}
if ( $ method === ' assertIsBool ' ) {
$ this -> assertTrue ( is_bool ( $ args [ 0 ]));
}
if ( $ method === ' expectExceptionMessageRegExp ' ) {
$ this -> expectExceptionMessageMatches (... $ args );
}
throw new InvalidArgumentException ();
}
إذا كان هناك عدة وحدات متعددة الإصدارات (وليست) متعددة الإصدارات لهذه الطرق وغيرها:
yoast/phpunit-polyfills
.phpunitgoodpractices/polyfill
.