ここまで来ている方は、PHPUnit 8 以降では、 setUp()
やtearDown()
などの一般的なテンプレート メソッドにvoid
戻り値の宣言が必要であることをよくご存じかと思いますが、これらのメソッドは当然、PHP 7.1 より前のバージョンでは機能しません。
PHP-CS-Fixer や Rector などの助けを借りて、これらの戻り値の型宣言を使用するようにコードを自動的に更新することは大したことではありませんが、何らかの不幸な (しかし、できれば儲かる) 理由があった場合には問題になる可能性があります。 、コードが PHP 7.0 または PHP 5.6 で動作することを確認する必要がありますが、PHPUnit の最近のバージョンでは得られる最良の環境を常に使用したいと考えています。
この場合、2 つの問題が発生します。 1 つは、PHPUnit の新しいバージョンには古いアサーションがありませんが、これを回避する方法は見つかります。もう 1 つは、前述したように、PHPUnit の新しいバージョンでは便利なテンプレート メソッドに対してvoid
戻り値の型宣言が必要であり、書き換えが必要になるため行き詰まってしまいます。これらのテンプレート メソッドなしでテストを機能させるのは非常に面倒であり、不可能ですらあります。そして、この小さな図書館があなたの窮地を救ってくれます。
composer require --dev sanmai/phpunit-legacy-adapter:"^6.4 || ^8.2.1"
まず、 PHPUnitFrameworkTestCase
ではなくLegacyPHPUnitTestCase
から拡張するようにテストを更新します。
- class MyTest extends PHPUnitFrameworkTestCase
+ class MyTest extends LegacyPHPUnitTestCase
次に、 setUp(): void
テンプレート メソッドを使用する必要がある場合は、完全に下位互換性のある方法で戻り値の型をすべて省略して、 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
があります。