sfDocTestPlugin 0.2.8をリリースしました。最近、大掛かりなプロジェクトでみんなでそれぞれテストを書いているのですが、お互いのテストが干渉して失敗する事が多くなりました。人のせいでテストが通らないと腹が立つので人間関係も悪くなります。今回のリリースでは、各テストの独立性を向上する事でテスト間の干渉がなくなり、円滑にプロジェクトを進めるのに役立つ機能を追加しました。
インストール
./symfony plugin:install sfDocTestPlugin
新機能
config/doctest.ymlに3種類(4つ)の設定項目を増やしました。以下は、config/doctest.ymlの例です:
default: app: frontend env: test # functionalize your test code(default off) function: on # you helper (lib/helper/MyTestHelper.php) helpers: [MyTest] # optional: setup set_up: my_test_set_up # optional: teardown tear_down: my_test_tear_down
それぞれについて解説します。
function
onに設定する事で、doctestのコードブロックを関数として囲みます。デフォルトはoffです。
通常、offの時は以下のようなテストコード:
/**
* #test test1
* <code>
* #ok(true,"ok!");
* </code>
*/これは、次のようにテストに展開されます:
$__test->comment('file: /path/to/apps/frontend/lib/myUser.class.php'); $__test->comment("test: test1"); $__test->ok(true,"ok!");
onにすると。関数として展開されます:
$__test->comment('file: /path/to/apps/frontend/lib/myUser.class.php'); $__test->comment("test: test1"); function doctest_1($__test,$__test_browser){ $__test->ok(true,"ok!"); } doctest_1($__test,$__test_browser);
helpers
helpersは、テスト用のヘルパーをここで読み込む事ができます。場所はテンプレートヘルパーと同様のlib/helperの下になります。
helpers: [MyTest]
この例だと、lib/helper/MyTestHelper.phpを探して読み込みます。
set_up / tear_down
各コードブロックの、初めと終わりに必ず実行する関数をここで定義する事ができます。テストコードの始まりでトランザクションをBEGINし最後にROLLBAKするような用途に使います。
config/doctest.ymlに以下のように書くと、テストの最初にmy_test_set_up()が呼ばれ、最後にmy_test_tear_down()が呼ばれるようになります:
set_up: my_test_set_up tear_down: my_test_tear_down
set_upとtear_downに設定した関数は以下のような形で$limeと$browserを引数として定義してください。以下は例です:
function my_test_set_up($lime, $browser){ $databaseManager = new sfDatabaseManager(); $databaseManager->initialize(); $con = Propel::getConnection(); $con->begin(); } function my_test_tear_down($lime, $browser){ $con = Propel::getConnection(); $con->rollback(); }
ずっとやりたかった機能を実装できたのですっきりしました。

