sfDocTestPlugin 0.2.8をリリースしました

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_uptear_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();
}

ずっとやりたかった機能を実装できたのですっきりしました。

Leave a Reply

Name (required)
Mail (will not be published) (required)

Your Comments:

Spam Protection by WP-SpamFree