2008年06月11日
Zend FrameworkでDocTest

Zend Frameworkをベースに開発している新しいカートのユニットテストを効率的に行おうと色々考えていて、前から気になっていたDocTestを試してみることにしました。
ということで、Mapleのkunitさん作のDocTestをZend Frameworkのプロジェクトで使うための覚書。
といっても、割とすんなりいきました。
Zend Frameworkにて、MVCの形のプロジェクトを既に用意できている段階であれば、パスの通ったところに、DocTestのalpha2を解凍して、srcディレクトリの中のファイルをコピー。
TestControllerを作成して、その中で、DocTestを呼び出すようにする。
<?php
class TestController extends My_Controller_Action
{
public function init()
{
parent::init();
}
public function preDispatch()
{
parent::preDispatch();
}
public function indexAction()
{
$this->_helper->viewRenderer->setNoRender();
$params = array('compileDir' => './var/tests_c');
$testDir = './lib/My';
$options = array('prefix' => 'My');
echo '<pre>';
Maple_DocTest::singleton($params)->run($testDir, $options);
echo '</pre>';
}
}
こんな感じ。
テスト対象を指定するところで、当初ライブラリ関係を収めているディレクトリ(./lib)を指定していたため、Zend Framework自体や、Smartyなんかもテスト対象とされてしまって美しくなかったんですが、ソースを読んでprefixの指定でうまく解決できました。
あとは、テストから除外したいディレクトリを設定するために、DocTestにちょっと手を加えたのと、テストに関する情報を抜き出す正規表現をちょっと変更しました。
DocTest.phpのgetTestDataメソッドの853行目
- if (preg_match_all('|(#test (.*?))?<code>(.*?)</code>|s', $str, $matches, PREG_SET_ORDER)) {
+ if (preg_match_all('|#test((.*?))<code>(.*?)</code>|s', $str, $matches, PREG_SET_ORDER)) {
どうも、元のままだと、#testから始まっていない(DocTest用ではない)Docコメントでも、<code></code>で囲まれた記述があると抜き出してしまう問題があるようでした。
Zend Frameworkのコードの中にそのような箇所があって、当初エラーを吐いていたので修正。
ということで、いざ動いてくれるとすごく楽ちんです。感動ものです。
投稿者 田中@グリニッジ : 17:50 | コメント (0) | トラックバック
2008年06月07日
本日生まれました。

私事ですが、本日、正午前に無事第2子が誕生いたしました。
女の子で3560g。元気そうな赤ちゃんでした。
予定日が6月3日だったので、今か今かという感じだったのですが、ようやく生まれて、ほっとしました。
前駆陣痛が続いていたので、ここ2週間くらいで深夜に病院に5回くらいは駆けつけたと思いますが、今晩はぐっすり眠れそうです。