14

私は PHP プロジェクトに取り組んでいる長年の Java プログラマーであり、PHPUnit を立ち上げて動作させようとしています。Java で単体テストを行う場合、テスト ケース クラスと通常のクラスを次のように別のディレクトリに配置するのが一般的です。

/src  
  MyClass.java

/test  
  MyClassTest.java

等々。

PHPUnit で単体テストを行う場合、同じディレクトリ構造に従うのが一般的ですか、それともテスト クラスをレイアウトするためのより良い方法はありますか? これまでのところ、「include("MyClass.php")」ステートメントを正しく機能させる唯一の方法は、同じディレクトリにテスト クラスを含めることですが、プッシュするときにテスト クラスを含めたくありません。製造。

4

4 に答える 4

11

ファイルを分けて保管するのは良い考えだと思います。私は通常、次のようなフォルダー構造を使用します。

/myapp/src/        <- my classes
/myapp/tests/       <- my tests for the classes
/myapp/public/      <- document root

あなたの場合、クラスをテスト ファイルに含めるために、パス全体を include メソッドに渡さないのはなぜですか?

include('/path/to/myapp/src/MyClass.php');

また

include('../src/MyClass.php');
于 2008-09-15T19:11:38.577 に答える
4

PHP の include_path を変更して、単体テストで MyClass.php を見つける場所を認識できるようにする必要がありますinclude()

テスト ファイルの先頭 (インクルードの前) に次のようなものを含めることができます。


set_include_path(get_include_path() . PATH_SEPARATOR . "../src");

これにより、ディレクトリがインクルード パスに追加srcされ、実際のコードをテスト コードから分離できるようになります。

于 2008-09-15T19:04:57.110 に答える
2

私の経験では、ブライアン・フィリップスの答えは十分に進んでいません。テストがPHPUnitによって実行されるとき、現在のディレクトリが何であるかはわかりません。したがって、set_include_path()式でテストクラスファイルの絶対パスを参照する必要があります。このような:

set_include_path(get_include_path() . PATH_SEPARATOR . 
                        dirname(__FILE__) . "/../src");

このフラグメントは、独自のヘッダーファイルSetupIncludePath.phpに配置し、「require_once」を使用してテストファイルに含めることができるため、テストスイートはパスを複数回追加しません。

于 2009-03-05T11:25:19.070 に答える
1

テスト ケースはソースの隣に、同じ名前で拡張子が .phpt のファイルに配置しました。デプロイ スクリプトは、本番環境にプッシュするときに *.phpt を除外するだけです。

于 2008-09-19T10:15:26.960 に答える