Home > PHP | 開発環境 > ユニットテストでデータ検証

ユニットテストでデータ検証

この記事の所要時間: 35

ユニットテストでプログラムで生成したデータを検証する方法です。

CSVファイルを検証するテストをPHPUnitで書いてみました。

< ?php
require_once "PHPUnit.php";

class DataTest extends PHPUnit_TestCase {
  function DataTest($name) {
    $this->PHPUnit_TestCase($name);
  }

  function testData() {
    // データ読み込み
    $fp = fopen('data.csv', 'r');
    if (!$fp) {
      die('data not found.');
    }

    // テストループ
    $line = 0;
    while(!feof($fp)) {
      $line++;
      $row = fgetcsv($fp, 4096);
      if (empty($row)) {
        continue;
      }

      if (count($row) != 3) {
        $this->fail('Line: ' . $line);
        continue;
      }

   // id は数値のみ
      $id = $row[0];
      $this->assertRegExp('/^[0-9]+$/', $id, $line);

   // code は英数字のみ
      $code = $row[1];
      $this->assertRegExp('/^[A-Za-z0-9]+$/', $code, $line);

   // name は値があれば良い
      $name = $row[2];
      $this->assertTrue(strlen($code) > 0, $line);
    }

    fclose($fp);
  }
}


$suite = new PHPUnit_TestSuite('DataTest');
$result = PHPUnit::run($suite);
echo $result->toString();
?>

ポイントは「assert失敗時のメッセージにデータを特定する項目を含めておく」くらいでしょうか。(このソースでは行数を入れていますが、DBのRecordsetを検証する時はpkeyの値を入れています。)あとはdata.csvが何万行あろうが何回テストしようがphpunitがきっちりテストしてくれます。やっている事は単純なのですが効果は高いです。

他にも複雑なSQLで生成されるデータをPHPで取得して検証したり、DBに問い合わせてデータが正しいかを検証するという方法もあります。もちろん正となるデータを用意しておいてそれと比較するというのもありです。

あと、ここではPHPUnitを使いましたが、データを相手にテストを行うので別にSimpleTestでも良いですし、PerlでもRubyでも何でもOKです。Javaで開発したシステムのデータをPHPで検証する、なんてこともできますね。(LL言語の利用範囲がこんなところにも;-))

ロジックの自動テストも大事ですが、生成物の自動テスト(チェック)もあると心強いものです。

Pocket

follow us in feedly

トラックバック:0

このエントリーのトラックバックURL
/blog/2006/11/php_testing_data.html/trackback
Listed below are links to weblogs that reference
ユニットテストでデータ検証 from Shin x blog

Home > PHP | 開発環境 > ユニットテストでデータ検証

検索
フィード
メタ情報

Return to page top