[PHP][Mockery] alias:付きでモックを作成しようとしたらエラーclass already existsが出るとき

カテゴリ: 未分類

PHPのモックライブラリであるMockeryを使ってphpunitのコードを作成して実行するとき、class already existsのエラーが出ることがあります。

Mockery\Exception\RuntimeException: Could not load mock  FooClass, class already exists

エラーの理由

このエラーが出る理由は、Mockelyでは同一のクラスに対してalias:やoverload:を使ったモッククラスは複数作成できないのですが、複数のテストで同じクラスのモックを作ると状態を保持してしまうためです。

対応方法

以下のように@runInSeparateProcess@preserveGlobalState disabledのアノテーションをつけることで、phpunitに対して状態の保持をしないように指示すれば良いです。

    /**
     * @runInSeparateProcess
     * @preserveGlobalState disabled
     */
    public function case1Test()
    {
        $fooMock = Mockery::mock('alias:' . FooClass::class);
        ...
    }

    /**
     * @runInSeparateProcess
     * @preserveGlobalState disabled
     */
    public function case2Test()
    {
        $fooMock = Mockery::mock('alias:' . FooClass::class);
        ...
    }

Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。