解決 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/TestCase.php at master · sebastianbergmann/phpunit
- Release Announcement for Version 8 of PHPUnit – The PHP Testing Framework
- PHPUnit Manual – Chapter 1. Installing PHPUnit
詳細錯誤訊息
$ 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
留言
張貼留言