PHPUnitをWebベースの古いコードでテストし、できるだけ変更を加えないようにしようとしています。テストが完了したら、ライブラリ機能を変更して、より使いやすくし、単体テストを改善することができます。しかし、私はそれを変更するために行われたテストが必要です。PHPUnitでローカルファイルを要求する
質問:私たちはアプリケーションの多くのプロジェクトでライブラリコードを共有しますが、すべて共通のディレクトリ構造を共有しています。ウェブサイトを実行すると、ライブラリにファイルが必要なときにローカルディレクトリを利用できます。
この考えてみましょう:
APP1
APP2
Library
Library/COMM
Library/UTIL
...
を使用すると、アプリケーションを起動すると、あなたが別のアプリケーションのためにAPP1またはAPP2のいずれかを指します。彼らは共通コード(メッセージング、DBアクセスなど)を持っています。図書館で問題は、ライブラリー内の関数が、今日コーディングされているように、特別なパラメーターを必要とすることです。これらのライブラリは単に( 'Config.php')を必要とします。 APP1またはAPP2(どちらもアプリケーション固有の設定があります)にあり、Webサーバーはライブラリファイルがrequire()だったときにAPP1またはAPP2をディレクトリとして使用しているためです。
これは機能しますが、PHPUnitでコードを実行しようとすると失敗します。私の質問は、テストを実行する前にあまりにも多くのレガシーコードを変更することなく、Config.phpファイルを含める方法です。
これは間違った形式ですが、これは私が継承したものです。
私は単純に( '../../ APP1/Config.php')を要求することはできません。両方のアプリケーションがこのライブラリを共有しているためです。
ご意見をいただければ幸いです。
注:ライブラリとすべてのプロジェクトをテストするときにテストしようとしています。そのため、include_pathで解決できるかどうかはわかりません。私は各アプリケーションごとに異なるPHPUnit.xml.distファイルを検討していますが、すぐにすべてのアプリケーションをテストするという企業の影響により、これを回避しようとしています。
私はブートストラップを見ましたが、内部コードはこれらのインクルードを呼び出しますが、これはディレクトリ内のパスのために無効です。 Webサーバーで実行すると、現在のディレクトリがまだ存在するため、require( 'Config。php ');これまでに開始されたAPP1またはAPP2の下にファイルがあります。私はあなたが言及したブートストラップがこれを助けるつもりであるかどうかは分かりません。基本コードは実行時にこれらのファイルを引き続き含む必要があるためです。私は、プロジェクト用に異なるファイル(bootstrapとphpunit.xml)が必要になると思います。助けてくれてありがとう。 –
あなたは両方のアプリを同時にテストしようとしているかどうかわからないので、ここにいくつかの提案があります。アプリがConfig.phpを含むところでコードを "require(__ DIR __。 '/ Config.php')に変更する。アプリを変更できず、一度に1つのアプリのみをテストしている場合は、ブートストラップでchdir()関数をテストしているアプリケーションのパブリックフォルダにする。そのコードを変更できず、両方のアプリケーションを一緒にテストしている場合。コードベースごとにテストスイートを作成します。各アプリケーションのテストスイートでは、chdir()を呼び出します。これは、常にテストスイートを介して実行する必要があることを意味します。 – SamHennessy
ありがとうございます。それは私が基本的に私がする必要があることを決めたものです。別のテストスイートとブートストラップを書く必要があります。次に、Config.phpの読み込み方法を変更します。最初に低レベルのクラステストを行っていたので、両方のアプリケーションをテストしようとしています。そのため、両方のアプリケーションをテストすることができました。 Seleniumは、UIとのやりとりをテストするために使用されます。 –