複数のテストファイルをまとめてテスト – lime without symfony part 2

前回第1回はlime_testを使った簡単なテストの実験をしました。今回第二回目はlime_testを複数の実行する基本枠組みlime_harnessクラスを試してみます。

lime_harnessについて

lime_harnessはテストの記述されたファイルのリストを持つlime_registrationを継承しそれらのファイルに書かれたテストを連続実行します。3つのクラスの関係は以下のとおりです。

lime_test ----<> lime_harness <|---- lime_registration

実験環境の構築

前回作ったlime-trialの直下にtestsというディレクトリを作りそこにテストを記述したファイルをを作成します。

mkdir tests
touch tests/t{1,2,3}.php

最後のtouchコマンドにより空のファイルt1.php t2.php t3.phpを作成します。

lime_harness 起動用のスクリプトを作成する

lime-trial/tests.phpというファイルを作成し以下のように記述します。

<?php
require_once("lime/lib/lime.php");
$h = new lime_harness(new lime_output_color());
$h->register("tests");
$h->run();

test.phpを実行する事でテストを行う事ができます。

一番簡単な例を試す

空ですがすでに、t1.php,t2.php,t3.phpを作成していますのでこれを使ってテストの起動スクリプトを実行してみます。

php test.php

結果は以下のようになります。

lime_harness 起動用スクリプトの解説

理解に苦しむところは無いと思いますが念のため解説します。 まず、

$h = new lime_harness(new lime_output_color());

一行目でlime_harness のオブジェクトを生成しています。第一引数はlime_testの第二引数にあたる出力制御クラスを記述します。

次に、

$h->register("tests");

register 関数はtestsディレクトリ以下をまとめてlime_harnessに登録します。ファイルとディレクトリを識別してますのでファイルを与えるとそのファイルのみを登録します。また、register でディレクトリを指定した場合デフォルトの設定では拡張子.phpのみ登録します。さらに、register別にとはregister_grobを利用する事もできます、これはphpのglob関数関数を利用してパターンマッチしたパスをまとめてlime_harnessに登録します。

テストの実装をしてみる

折角ですのでt1.phpに何かテストを書いてみましょう。

<?php
require_once("lime/lib/lime.php");
$t = new lime_test(null,new lime_output_color);
$t->ok(true);	
$t->ok(true,"may be sccess");	
$t->ok(false,"may be error");	
$t->is(true,false,"may be error");

これを実行すると以下のようになります。

Failed tests 3,4 と3番目と4番目のテストでエラーになっていると判ります。

実行計画数を間違えてみる

ついでにplanのエラーも見てみましょう。以下のようにt2.phpを書き換えます。

<?php
require_once("lime/lib/lime.php");
// 本当は plan は4が正しい
$t = new lime_test(3,new lime_output_color);
$t->ok(true);	
$t->ok(true,"may be sccess");	
$t->ok(false,"may be error");	
$t->is(true,false,"may be error");

実行結果は以下のようになります。

「dubious(疑わしい)」と報告され255のステータスが返ります。


“lime without symfony” の第2回目は以上で終了です。予想通りの機能が予想通り実装されており、予定通り退屈な回でした。次回はlime without symfony3回目お題はcoverage(網羅率)です。

P.S. 先程水と安全とネットはタダの国日本に帰還しました

lime without symfony シリーズ

  1. 新しく採用されたテスティングフレームワークの紹介
  2. 複数のテストファイルをまとめてテスト
  3. テストは十分?

Leave a Reply

You must be logged in to post a comment.