2013年12月11日水曜日

PHPUnit データプロバイダ使い方まとめ

PHPのテスティングフレームワークPHPUnit データプロバイダを使用したテストの書き方をまとめてみました。

データプロバイダを使うことでテストのリファクタリングがおこなえます





サンプルソース
TestClass.php
<?php
class TestClass
{
    public function sum($a, $b)
    {

        if (!is_numeric($a) || !is_numeric($b)) {
            return false;
        } elseif (100 < $a || 200 < $b) {
            return false;
        }
        return $a + $b;
    }
}
TestClassTest.php
<?php
require_once __DIR__.'/TestClass.php';
class TestClassTest extends PHPUnit_Framework_TestCase
{
    public function 変数Provider()
    {
        return [
                    [101, 100],
                    [100, 201],
                    ['あ', 200],
                    [100, 'あ']
               ];
    }

    /**
     * @test
     * @dataProvider 変数Provider
     **/
     public function 無効な数値または範囲外の数値が与えられたた場合false($a, $b)
     {
         $tc = new TestClass();
         $this->assertFalse($tc->sum($a, $b));
     }

テストケースのアノテーションに@dataProviderを指定し使用するデータプロバイダ名(変数Provider)を記述します。
データプロバイダの戻り値は必ず配列に格納する必要があります。
配列の中にさらに配列を作っていますが、4パターンの戻り値を定義しています。
これによりテストケースは4回実行されることになります。

もし、サンプルソースのTestClassのsum関数の仕様が変わってもデータプロバイダを変更するだけで済みます。

ついでに配列と連想配列のデータプロバイダの書き方
    public function 配列()
    {
        return [
                    [
                        [
                            [0 => 'てすと', 1 => 'てすと2']
                        ],
                        [
                            ['hoge' => 'てすと3', 'hogehoge' => 'てすと4']
                        ]
                    ]
               ];
    }

0 件のコメント :

コメントを投稿