0

次のフォルダー構造があります。

/main
    /loader.php
    /build.xml
    /components
        /package1
            /class1.php
        /package2
            /class2.php
    /tests
        /package1
            /class1.test.php
        /package2
            /class2.test.php

Web アプリケーションを実行するときはloader.php、最初にロードし、 を呼び出して他のコンポーネントを含めますLoader::load( 'package_name' )。次に、必要なすべてのファイルが含まれます。ここでの良い点はloader.php、クラス ファイル内に を含める必要がないことですLoader

単体テスト クラスは、必要なすべてのクラスを明示的に含めることで、この動作をシミュレートします。なので、phingやPHPUnitでも問題ありません。

しかし今、phing と Xdebug を使用してカバレッジ レポートを生成したいと考えています。ここでの問題は、ping がすべての PHP ファイルをロードしてカバレッジ データベースを作成しているように見えることです。Loader残念ながら、PHP ファイルで使用されているクラスが見つからないため、停止します。

すべてのクラス ファイルにステートメントを簡単に追加できincludeますが、コード カバレッジ分析がファイルを検査している場合にのみ、ファイルを含める方法があるのでしょうか?

その他のアイデア: 単体テスト ディレクトリをスキャンして、必要なすべてのインクルードを検出するようにカバレッジ分析を構成することもできます。次に、パターンなどに一致するクラスをフィルタリングする必要があります/Test$/i。可能?

4

1 に答える 1

1

私は似たようなものを年齢を探しました。

結局、以下の変更で終わりました。基本的に、読み込みロジックを含むphpファイルを先頭に追加するようにphp cliに指示します。

私のcliのphp.iniで、次のように設定しました:

auto_prepend_file = autoload.php

ファイルがインクルード パス (私の場合は /usr/share/php) にあることを確認し、次の行を挿入しました (インクルード パスにもある Zend Framework を使用しています)。

require_once "Zend/Loader/Autoloader.php"; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Model_');

さて、あなたができることは、__autoload 関数を定義し、オートロードする必要があるものを定義することですが、アイデアはわかります。

それは醜いハックですが、私のために物事を成し遂げました。

Wkr Jeroen

于 2009-08-07T07:40:40.233 に答える