2012-03-23 6 views
0

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ファイルを検討していますが、すぐにすべてのアプリケーションをテストするという企業の影響により、これを回避しようとしています。

答えて

1

phpunit.xml(< phpunit bootstrap = "./ bootstrap.php" > ...)から、cli(--bootstrap ./bootstrap.php)からブートストラップファイルを指定できます。そのファイルでは、あなたが探しているこの包含を行うことができます。

アドバイスの言葉として、レガシーコードベースをテストするように指示するときは、ユニットテストで始まらないでください。あなたの最初の目標は、「ある種の自動テストを実施する」ことです。ほとんどの人にとって、これはシステムテストになります。それは全体としてスタック/サイトをテストしています。このための一般的なツールはSeleniumです。

これはまだ小さなタスクではありません。あなたがしなければならないことは、「私のシステムを一貫した状態にするにはどうすればよいのですか」ということです。最初に行う必要がある作業は、データベースのテストデータをインポートして空にすることです。一度これを行うことができます自動テストを確実に実行することができます。一貫性を持たせるためには、他にも多くのことが必要です。日付と時刻は良い例です。

私の主張は、経験から、ユニットテストでは、自動化されたテストが努力する価値があることを証明するために必要な価値はないということです。

幸運を祈る!

+0

私はブートストラップを見ましたが、内部コードはこれらのインクルードを呼び出しますが、これはディレクトリ内のパスのために無効です。 Webサーバーで実行すると、現在のディレクトリがまだ存在するため、require( 'Config。php ');これまでに開始されたAPP1またはAPP2の下にファイルがあります。私はあなたが言及したブートストラップがこれを助けるつもりであるかどうかは分かりません。基本コードは実行時にこれらのファイルを引き続き含む必要があるためです。私は、プロジェクト用に異なるファイル(bootstrapとphpunit.xml)が必要になると思います。助けてくれてありがとう。 –

+0

あなたは両方のアプリを同時にテストしようとしているかどうかわからないので、ここにいくつかの提案があります。アプリがConfig.phpを含むところでコードを "require(__ DIR __。 '/ Config.php')に変更する。アプリを変更できず、一度に1つのアプリのみをテストしている場合は、ブートストラップでchdir()関数をテストしているアプリケーションのパブリックフォルダにする。そのコードを変更できず、両方のアプリケーションを一緒にテストしている場合。コードベースごとにテストスイートを作成します。各アプリケーションのテストスイートでは、chdir()を呼び出します。これは、常にテストスイートを介して実行する必要があることを意味します。 – SamHennessy

+0

ありがとうございます。それは私が基本的に私がする必要があることを決めたものです。別のテストスイートとブートストラップを書く必要があります。次に、Config.phpの読み込み方法を変更します。最初に低レベルのクラステストを行っていたので、両方のアプリケーションをテストしようとしています。そのため、両方のアプリケーションをテストすることができました。 Seleniumは、UIとのやりとりをテストするために使用されます。 –

関連する問題