Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
51
Help us understand the problem. What is going on with this article?
@ismt7

PHPUnitのsetUp()を使ったら「must be compatible」とエラーが表示される

More than 1 year has passed since last update.

前提

  • PHP 7.2.15-0ubuntu0.18.04.1 (cli) (built: Feb 8 2019 14:54:22) ( NTS )
  • PHPUnit 8.0.5 by Sebastian Bergmann and contributors.
  • Ubuntu 18.04.2 LTS

問題の記述

このエラーに遭遇した人は公式ドキュメントや他の方ブログなどを参考にして以下のような実装して、
エラーが出力されたのではないでしょうか?

class MovieTest extends TestCase {
    protected function setUp() {
        ・・・
    }
}

エラー内容

PHP Fatal error:  Declaration of MovieTest::setUp() must be compatible with PHPUnit\Framework\TestCase::setUp(): void in /{途中省略}/MovieTest.php on line 5

エラーの内容を簡単に記述すると、MovieTest::setUp()で記述したものとTestCase::setUp()で定義されてるものが一致する必要があるみたいです。

もう少しPHP関連の動きも交えてお話するとPHP7.0から型宣言ができるようになり、PHP7.2から戻り値の型宣言もできるようになりました。その動きに合わせてPHPUnitでも8.xから型宣言をする形式に実装を修正されているみたいです。そのことを踏まえると呼び出し側でも後で記載しているような実装をする必要があります。実際に試していないで推測ですが、7.xを利用している人は上記のようなエラーは表示されないのではないかと思います。

解決方法

先に結論から言うと、setUp()に戻り値型の: voidの宣言を記述すると上手くいきました。
(後述のTestCaseクラスと同じ記述にする)

protected function setUp(): void {
   ・・・
}

参考

参考までに実際に./vendor/phpunit/phpunit/src/Framework/TestCase.phpTestCaseクラスを見てみると以下の通りに記述されていますので、これと同じように記述すると良さそうです。(405行目あたりくらい)
関係ある部分だけ抜粋して記述しています。

abstract class TestCase extends Assert implements Test, SelfDescribing
{

     /**
     * This method is called before each test.
     */
    protected function setUp(): void
    {
    }
}

記述に誤字脱字や不適切な表現がありましたら、ご指摘いただけると幸いです。

51
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ismt7

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
51
Help us understand the problem. What is going on with this article?