PHPUnit - user000422/0 GitHub Wiki

基本情報

PHPテストを行うためのフレームワーク 実行時エラーログはphp_errors.log 対象クラスのロジックに「exit」が存在する場合はテストを行えない。(「exit」されないパターンは可能)

よく出てくる単語

単語 意味
expected 期待結果

ディレクトリ構成

/プロジェクトフォルダ
  ├─ tests
  │  └ unit
  │    └ sampleTest.php
  └─ phpunit.xml

phpunit.xml(設定ファイル)

[対象クラス名]Test.php(テストケース)

※PHPUnit4実績のソース(ひな形)

<?php
require_once('/sample/targetClass.php'); // 対象クラスのパス

// 対象クラス+Testのクラスを作成 「PHPUnit_Framework_TestCase」継承は固定
class targetClassTest extends PHPUnit_Framework_TestCase
{
    // テーブルがクリアされるので使用しないこと
    //use RefreshDatabase;

    // テストメソッド メソッド名は自由
    public function testMethod(){
        // インスタンス生成(対象クラスのインスタンスを生成)
        $targetClass = new targetClass();

        // アサーション(第一引数が「期待結果」、第二引数が「実行結果」)
        $this->assertEquals($expected, $sample_data);
    }
}

(応用)データプロバイダ

コメントのアノテーションは重要 アノテーションを設定したメソッドがデータプロバイダの配列分ループするイメージ

<?php
require_once('/sample/targetClass.php');

class targetClassTest extends PHPUnit_Framework_TestCase
{
    // データプロバイダ定義
    public function sampleDataProvider(){
        return [
            'パターン1' => ['1', '2'],
            'パターン2' => ['2', '3']
        ];
    }

    /**
     * @dataProvider sampleDataProvider
     */
    // データプロバイダの戻り値が引数に渡される
    public function testMethod($num1, $expected){
        // インスタンス生成省略
        // アサーションで実行する対象メソッドの呼び出しにデータを渡すとデータプロバイダの配列分実行される
        $this->assertEquals($expected, $sampleInstance->calcPlus1($num1, $end_date));
    }
}

アサーション

// 比較(型は許容)
$this->assertEquals('期待結果', 'テスト結果');

// 部分一致
$this->assertStringContainsString('いうえ', 'あいうえお');

エラー対応

■テスト実行時に「Warning: require_once…」 1.対象クラスの「require_once」で定数を使用している場合はその定数をインクルードするための「require_once」をテストケースの最初に記述する。