« 本日生まれました。 | トップ

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のコードの中にそのような箇所があって、当初エラーを吐いていたので修正。

ということで、いざ動いてくれるとすごく楽ちんです。感動ものです。

投稿者 田中@グリニッジ : 2008年06月11日 17:50

トラックバック

このエントリーのトラックバックURL:
http://blog.tanaka-cs.com/mt/mt-tb.cgi/142

コメント

コメントしてください




保存しますか?


楽天トラベル 夏の旅行