この記事の所要時間: 約 3分5秒
ユニットテストでプログラムで生成したデータを検証する方法です。
CSVファイルを検証するテストをPHPUnitで書いてみました。
PHP:
-
<?php
-
require_once "PHPUnit.php";
-
-
class DataTest extends PHPUnit_TestCase {
-
function DataTest($name) {
-
$this->PHPUnit_TestCase($name);
-
}
-
-
function testData() {
-
// データ読み込み
-
if (!$fp) {
-
}
-
-
// テストループ
-
$line = 0;
-
$line++;
-
continue;
-
}
-
-
$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];
-
}
-
-
}
-
}
-
-
-
$suite = new PHPUnit_TestSuite('DataTest');
-
$result = PHPUnit::run($suite);
-
?>
ポイントは「assert失敗時のメッセージにデータを特定する項目を含めておく」くらいでしょうか。(このソースでは行数を入れていますが、DBのRecordsetを検証する時はpkeyの値を入れています。)あとはdata.csvが何万行あろうが何回テストしようがphpunitがきっちりテストしてくれます。やっている事は単純なのですが効果は高いです。
他にも複雑なSQLで生成されるデータをPHPで取得して検証したり、DBに問い合わせてデータが正しいかを検証するという方法もあります。もちろん正となるデータを用意しておいてそれと比較するというのもありです。
あと、ここではPHPUnitを使いましたが、データを相手にテストを行うので別にSimpleTestでも良いですし、PerlでもRubyでも何でもOKです。Javaで開発したシステムのデータをPHPで検証する、なんてこともできますね。(LL言語の利用範囲がこんなところにも;-))
ロジックの自動テストも大事ですが、生成物の自動テスト(チェック)もあると心強いものです。
- Newer: 前の日曜日は何日?
- Older: livedoor Readerで「ピンを開く」数を増やす
トラックバック: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

