LoginSignup
1
1

More than 3 years have passed since last update.

PHPUnitのテスト失敗でSerialization of 'Closure' is not allowedが発生した場合の対応

Last updated at Posted at 2019-06-28

背景

PHPUnitを実行していたところテストが失敗する箇所で Serialization of 'Closure' is not allowed が発生するテストがあることがわかりました。

エラーが発生するコード

テストコードを単純にして検証を繰り返したところ、以下のコードで再現しました。

<?php
use Mockery;
use \PHPUnit\Framework\TestCase;

class HogeTest extends \PHPUnit\Framework\TestCase {

    protected function setUp(): void
    {
        $mockService = Mockery::mock('fuga');
        parent::setUp();
    }

    protected function tearDown(): void
    {
        Mockery::close();
    }

    public function testHoge() {
        $this->assertEquals(1, 2);
    }
}
?>

対応

parent::tearDown(); が呼び忘れていたので追加することで対応できました。

<?php
use Mockery;
use \PHPUnit\Framework\TestCase;

class HogeTest extends \PHPUnit\Framework\TestCase {

    protected function setUp(): void
    {
        $mockService = Mockery::mock('fuga');
        parent::setUp();
    }

    protected function tearDown(): void
    {
        Mockery::close();
        parent::tearDown();
    }

    public function testHoge() {
        $this->assertEquals(1, 2);
    }
}
?>

余談

  • parent::tearDown(); を呼ばなくてもテストに成功する場合はエラーになりません
  • PHPUnitとの統合:Mockery1.0 のサンプルコードも parent::tearDown(); を呼び出していないので注意が必要です
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1