PHP7+PHPUnitで自前のセッションハンドラクラスのテストを書く


  • セッションハンドラを自作した
  • セッションIDが更新されるかとか、古いセッションがちゃんと破棄されるかとかテストしたい
  • PHPUnitの@runInSeparateProcessアノテーションをつければテストできるよ

サンプルコード

<?php

class MySessionHandlerTest extends PHPUnit\Framework\TestCase
{
    /**
     * @runInSeparateProcess
     */
    public function testCreateWriteAndSave()
    {
        // TODO 初めてアクセスした時にセッションが生成されて保存されるテスト
        // @runInSeparateProcess を指定しているので、テスト終了後に自動的にsaveされる
    }

    /**
     * @runInSeparateProcess
     * @depends testCreateWriteAndSave
     */
    public function testLoadReWriteAndSave()
    {
        // @depends を指定しているので、testCreateWriteAndSave() の結果を受けてテストが実行される
        // TODO 2回目にアクセスした時に、セッションIDが付け替えられるテスト
        // TODO 前回のセッションデータがロードできるテスト
        // TODO セッションデータが上書きできるテスト
        // @runInSeparateProcess を指定しているので、テスト終了後に自動的にsaveされる
    }

    /**
     * @runInSeparateProcess
     * @depends testLoadReWriteAndSave
     */
    public function testReLoadAndClear()
    {
        // @dependsを指定しているので、testLoadReWriteAndSave() の結果を受けてテストが実行される
        // TODO 前回のセッションデータをロードしてクリアするテスト
        // @runInSeparateProcess を指定しているので、ここでプロセスが終了し自動的にsaveされる
    }

    /**
     * @runInSeparateProcess
     * @depends testReLoadAndClear
     */
    public function testDestroy()
    {
        // @dependsを指定しているので、testReLoadAndClear() の結果を受けてテストが実行される
        // TODO 前回のセッションデータがクリアされているテスト
        // TODO サーバサイドのセッションを破棄するテスト
        // @runInSeparateProcess を指定しているので、ここでプロセスが終了し自動的にsaveされる
    }

    /**
     * @runInSeparateProcess
     * @depends testDestroy
     */
    public function testDestroyed()
    {
        // @dependsを指定しているので、testDestroy() の結果を受けてテストが実行される
        // TODO セッションが残っていないことを確認するテスト
    }
}