なおのつぼやき

Webエンジニアです。PHP/Laravel、あとRustを少々

PHPUnitのバージョンアップをしたらえらい目にあった

PHPUnitのバージョンを6系から9系にあげたら色々動かなくなったところの修正メモです

setUp()メソッドなどの戻り値に型の宣言

戻り値にvoidの定義が追加されたことでオーバーライドしている箇所は軒並み次のエラーが発生

PHP Fatal error:  Declaration of Tests\SampleTest::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp(): void

各メソッドに戻り値をつけてあげる

-    protected function setUp()
+    protected function setUp(): void

@expectedException系アノテーションが消えた

@expectedExceptionアノテーションは9系で削除されたので代わりにexpectException()メソッド等を使うように変更する

// 消える
@expectedException
@expectedExceptionCode
@expectedExceptionMessage
@expectedExceptionMessageRegExp

// 代わり
expectException()
expectExceptionCode()
expectExceptionMessage()
expectExceptionMessageMatches()

assertInternalType()とassertNotInternalType()が消えた

代わりにassertIsXXXXX()assertIsNotXXXXXを使う
※XXXXXにはArrayなどの型名がはいる

assertIsArray()
assertIsBool()
assertIsFloat()
assertIsInt()
assertIsNumeric()
assertIsObject()
assertIsResource()
assertIsString()
assertIsScalar()
assertIsCallable()
assertIsIterable()
assertIsNotArray()
assertIsNotBool()
assertIsNotFloat()
assertIsNotInt()
assertIsNotNumeric()
assertIsNotObject()
assertIsNotResource()
assertIsNotString()
assertIsNotScalar()
assertIsNotCallable()
assertIsNotIterable()

assertArraySubsetが消えた

代替えメソッドがあるわけではなさそうなので次の組み合わせで対応

assertArrayHasKey()でキーのチェック
assertSame()で値のチェック