現象
PHP7.3、PHPUnit3.7をインストールした環境で、CakePHP2のユニットテストを実行すると下記のようなエラーが発生しました。
Error: Declaration of PHPUnit_Framework_Comparator_DOMDocument::assertEquals($expected, $actual, $delta = 0, $canonicalize = false, $ignoreCase = false) must be compatible with PHPUnit_Framework_Comparator_Object::assertEquals($expected, $actual, $delta = 0, $canonicalize = false, $ignoreCase = false, array &$processed = Array)
File: /var/www/html/blogTutorial/vendors/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php
Line: 259
原因
PHPUnitのバグ
assertEquals
をオーバーライドする際、引数の数が間違っているため。
- PHPUnit_Framework_Comparator_Object(親)の
assertEquals
定義
/approot/vendors/phpunit/phpunit/PHPUnit/Framework/Comparator/Object.php
class PHPUnit_Framework_Comparator_Object extends PHPUnit_Framework_Comparator_Array
{
public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE, array &$processed = array())
{
- PHPUnit_Framework_Comparator_DOMDocument(子)の
assertEquals
/approot/vendors/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php
class PHPUnit_Framework_Comparator_DOMDocument extends PHPUnit_Framework_Comparator_Object
{
// ~~ 途中略 ~~
public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE)
対応方法
- ①安直な方法(あまり褒められたやり方ではないですが・・・・)
引数を親に合わせるため、直接書き換える
/approot/vendors/phpunit/phpunit/PHPUnit/Framework/Comparator/DOMDocument.php
class PHPUnit_Framework_Comparator_DOMDocument extends PHPUnit_Framework_Comparator_Object
{
// ~~ 途中略 ~~
public function assertEquals($expected, $actual, $delta = 0, $canonicalize = FALSE, $ignoreCase = FALSE, array &$processed = array())
- ②PHPUnitのバージョンを新しくする方法もあるようです。参考ページをご確認ください。
参考ページ