解決 PHPUnit 遇到 Fatal error: Declaration of MyClassTest::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp()

執行 PHPUnit 遇到錯誤訊息「Fatal error: Declaration of MyClassTest::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp()」。解決方式是依照 PHPUnit 版本 8 文件 提到 setUp()、tearDown() 等函數需要宣告回傳的資料型別 void 修改。

問題原因

在電腦跑 PHPUnit 是透過 composer 安裝 (版本 7),而 GitLab docker 跑的 PHPUnit 是直接下載 PHPUnit 官方網站的 phpunit.phar (版本 8)。而 PHPUnit 版本 8 在文件提到 setUp()、tearDown() 等函數需要宣告回傳的資料型別 void。

解決方式

原本寫法
use PHPUnit\Framework\TestCase;
class MyClassTest extends TestCase {
    public function setUp()
    {
        $this->myClass = new MyClass();
        //echo __FUNCTION__ . ' called' . PHP_EOL;
    }
    public function tearDown()
    {
        $this->myClass = null;
        //echo __FUNCTION__ . ' called' . PHP_EOL;
    }
}

修改成
use PHPUnit\Framework\TestCase;
class MyClassTest extends TestCase {
    protected function setUp(): void
    {
        $this->myClass = new MyClass();
        //echo __FUNCTION__ . ' called' . PHP_EOL;
    }
    protected function tearDown(): void
    {
        $this->myClass = null;
        //echo __FUNCTION__ . ' called' . PHP_EOL;
    }
}

相關資料


詳細錯誤訊息

$ phpunit --configuration ./test/phpunit_myclass.xml --coverage-text --colors=never
Fatal error: Declaration of MyClassTest::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp(): void in /builds/user/lib/test/DbListTest.php on line 2676
Call Stack:
    0.0007     564512   1. {main}() /usr/local/bin/phpunit:0
    0.0663    9810096   2. PHPUnit\TextUI\Command::main() /usr/local/bin/phpunit:619
    0.0663    9810208   3. PHPUnit\TextUI\Command->run() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:164
    0.0663    9810208   4. PHPUnit\TextUI\Command->handleArguments() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:175
    0.0681    9814848   5. PHPUnit\Util\Configuration->getTestSuiteConfiguration() phar:///usr/local/bin/phpunit/phpunit/TextUI/Command.php:910
    0.0681    9815432   6. PHPUnit\Util\Configuration->getTestSuite() phar:///usr/local/bin/phpunit/phpunit/Util/Configuration.php:870
    0.0685    9853560   7. PHPUnit\Framework\TestSuite->addTestFiles() phar:///usr/local/bin/phpunit/phpunit/Util/Configuration.php:1013
    0.0685    9853560   8. PHPUnit\Framework\TestSuite->addTestFile() phar:///usr/local/bin/phpunit/phpunit/Framework/TestSuite.php:625
    0.0685    9853560   9. PHPUnit\Util\FileLoader::checkAndLoad() phar:///usr/local/bin/phpunit/phpunit/Framework/TestSuite.php:546
    0.0685    9853752  10. PHPUnit\Util\FileLoader::load() phar:///usr/local/bin/phpunit/phpunit/Util/FileLoader.php:47
ERROR: Job failed: exit code 1


留言