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

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

  • 2006-11-17 (金) 21:59
  • PHP | 開発環境
  • このエントリーをはてなブックマークに追加
この記事の所要時間: 35

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

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

PHP:
  1. <?php
  2. require_once "PHPUnit.php";
  3.  
  4. class DataTest extends PHPUnit_TestCase {
  5.   function DataTest($name) {
  6.     $this->PHPUnit_TestCase($name);
  7.   }
  8.  
  9.   function testData() {
  10.     // データ読み込み
  11.     $fp = fopen('data.csv', 'r');
  12.     if (!$fp) {
  13.       die('data not found.');
  14.     }
  15.  
  16.     // テストループ
  17.     $line = 0;
  18.     while(!feof($fp)) {
  19.       $line++;
  20.       $row = fgetcsv($fp, 4096);
  21.       if (empty($row)) {
  22.         continue;
  23.       }
  24.  
  25.       if (count($row) != 3) {
  26.         $this->fail('Line: ' . $line);
  27.         continue;
  28.       }
  29.  
  30.    // id は数値のみ
  31.       $id = $row[0];
  32.       $this->assertRegExp('/^[0-9]+$/', $id, $line);
  33.  
  34.    // code は英数字のみ
  35.       $code = $row[1];
  36.       $this->assertRegExp('/^[A-Za-z0-9]+$/', $code, $line);
  37.  
  38.    // name は値があれば良い
  39.       $name = $row[2];
  40.       $this->assertTrue(strlen($code)> 0, $line);
  41.     }
  42.  
  43.     fclose($fp);
  44.   }
  45. }
  46.  
  47.  
  48. $suite = new PHPUnit_TestSuite('DataTest');
  49. $result = PHPUnit::run($suite);
  50. echo $result->toString();
  51. ?>

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

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

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

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

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/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