状況
私たちはプロジェクトでPHPUnitを使用しており、などがオフになっているphpunit.xml
ことを確認するためにを使用しています。backupGlobals
インクルードパスが設定され、自動ロードがアクティブであることをさらに確認するために、テストブートストラップもカスケード接続します。つまり、すべてのtestとalltests-suiterequire_once(__DIR__ . '/../bootstrap.php');
の上部には、明らかに読み取りが行われるベースフォルダーレベルまでの上部がrequire_once(__DIR__ . '/bootstrap.php');
あり、実際のブートストラップファイルが存在します。
基本的に、私たちのテストは自律的です。AllTests.php
任意のフォルダ内の任意のファイルを単独で呼び出すことができ*Test.php
、適切な構成で実行されます。
いいえを除いて。'ちょっと待ってください。'
これは、開発者に使用を強制するか、開発者が(PHPUnitが実行されたときに現在の作業ディレクトリからプルするように)phpunit --configuration=path/to/phpunit.xml
のあるフォルダーにいる場合にのみ当てはまります。phpunit.xml
場合によっては、これにより、ある開発者のマシンでのテストが失敗している理由と、別の開発者のマシンで実行されている理由を特定することが非常に困難になります。同じテスト環境が必要なのはブートストラップだけではないことを忘れるだけです。試してみるとブートストラップを忘れることができなかったので、それはテスト自体にあるため、他の設定、特に通常はオプションの設定を忘れていることに注意してください(のようなフォルダにいる場合は、phpunit.xml
自動的にプルされます)、は簡単だ。
実際、それは数回起こりました。
質問
phpunit.xml
コマンドラインスイッチまたはそのディレクトリにあることによって、事前にPHPUnitに提供するのではなく、便利なユビキタスブートストラップファイルなど、実行中のテストファイルで使用する方法を提供できますか?
コードをざっと見てみると、答えはノーであることがわかります。構成は適切であり、テストファイルがプルされる前に実際にロードされているようです。
[PHPUnit/TextUI/Command.php]
...
if (isset($this->arguments['configuration'])) {
$configuration = PHPUnit_Util_Configuration::getInstance(
$this->arguments['configuration']
);
$phpunit = $configuration->getPHPUnitConfiguration();
...
構成にテストホワイトリストまたはブラックリストを含めることができることを考えると、これはある程度意味があります。
実際には、テストブートストラップ自体にテストフィルターをロードすることは意味がないため、ウィンドウの外にある可能性のある構成の半分ですが、PHPUnitの実際の動作フラグは...
[sample of part of our phpunit.xml]
<phpunit
backupGlobals="false"
backupStaticAttributes="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
syntaxCheck="false"
processIsolation="false"
colors="true">
...おそらく、「色」を除いて、テスト自体が何らかのレベルで決定できるはずの何かとして私を襲います。
慰め賞...
backupGlobals="false"
確かに、誰かが方法を知っていれば、今のところ、ブートストラップファイルからPHPUnitを教えることができるかどうかを知って幸せです。
(役に立たない場合、私が追求する実際的な答えは、おそらくphpunit.xml
すべてのサブフォルダーにコピーすることです。冗長なコピーが作成されるため、その解決策は避けたいと思います。設定を変更することを選択した場合は...ええ、痛いです。 !)