12

phpunit を使用していますが、phpunit 自体ではなく、コードとテスト ディレクトリのインクルード パスに問題があります。

次のコード構造があります。

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

私の StringCalculatorTest.php 内には、require ステートメントがあります。

require_once('../StringCalculator.php');

phpunit StringCalculatorTest.phptests フォルダー内からの実行は完全に機能します。

ただし、ルートディレクトリにphpunit.xml構成ファイルを導入すると、つまり

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

phpunit.xml

インクルードパスがねじ込まれています。require_once を置き換える必要があります

require_once('StringCalculator.php');

アプリケーションとテスト ディレクトリ間のインクルード パスを設定する正しい方法は何ですか?

4

3 に答える 3

11

PHP インクルード パスを設定する最適な場所は、ブートストラップ ファイルです。通常、phpunit.xmlファイルにはブートストラップ属性が含まれます。

<phpunit backupGlobals="true"
     backupStaticAttributes="false"
     bootstrap="bootstrap.php"
     cacheTokens="true"
     colors="true"
     ... and so on ...
</phpunit>

次に、ブートストラップ ファイルで、インクルード パスを設定したり、重要なファイルをインクルードしたりできます。

set_include_path(get_include_path() . PATH_SEPARATOR . '../my/sources');

構成ファイルは、PHPunit ドキュメントの付録 Cで説明されています。

編集:リンクが更新されました

于 2012-10-29T21:53:48.010 に答える
3

まず、どのように機能するかわかりません。require_once('../StringCalculator.php');むしろ次のようにする必要がありますrequire_once('../Application/StringCalculator.php');

次に、 slashingweapon の回答は適切であり、これが最高の IMO ですが、それほど面倒なことをしたくない場合require_onceは、現在のファイルのディレクトリから開始するように指定できます。

require_once(__DIR__ . '../Application/StringCalculator.php');
于 2012-10-30T08:39:06.813 に答える