2011-06-18 6 views
8

私は一般的に単体テストには慣れていませんが、MVCパターン(PHPを使用)で実装したいと考えていました。今私はこれにどのように接近するか分からない。テストMVCクラスをどのようにユニット化するのですか?

ユニットテストをフレームワークに組み込むか、testsという名前の新しいフォルダを作成して、必要なすべてのクラスと単体テストをそれぞれテストする必要がありますか?要するに、モデルMが存在する場合には、フレームワーク自体とのカップリングもある。したがって、モデルをテストするには、フレームワークの一部を単体テストに含める必要がありますか?

これを達成する方法についていくつかの良いコード例がありますか?

答えて

7

ユニットテストをフレームワークに組み込むか、testsという名前の新しいフォルダを作成し、必要なすべてのクラスと単体テストをそれぞれ含めますか?

必ず別のフォルダを作成してください。テストで生産コードを混乱させることは、パフォーマンスやデバッグ上の理由から一般的には好ましくありません。

モデルをテストするために、フレームワークの一部を単体テストに含めるべきですか?

単体テストには依存性がほとんどない必要があります。 AクラスがBに依存する場合、Bが失敗した場合、Aも失敗しないように、Bをモックしてください。

ユニットテストの主な利点(正しく実行された場合)は、問題を簡単に特定できることです。 ABの依存関係のために失敗した場合、最初にA,、次にBを見ます。繰り返しますが、BCに、Cが失敗した場合は、A,BCの順に調べる必要があります。これは単体テストの大きな利点の1つです。すべてのテストが正常に実行された場合、CのエラーはC以外の場所では失敗しません。そのため、問題を解決するために検索する単一のクラスがあります。本当にあなたのコードのエラープルーフを作るために

、あなたがPHP assertionsと一緒にユニットテストを使用することができます。

$return = $this->addOne($some_param); 
assert('$return == $some_param + 1'); 

ところででユニットテストとは反対に、MVCテストユニットの間に違いはありません一般的です。

1

ユニットテストは、MVCフレームワークの一部である必要があります。たとえば、CodeIgniterユーザガイドのUnit Testing Classの章をご覧ください。

1

万一のユニットテストは、サードパーティのフレームワークを使用している場合、それは通常、いくつかのユニットテストヘルパーが含まれます フレームワークに組み込まれた、または私達はちょうどテスト

と呼ばれる新しい フォルダを作成します自分のテストクラスを別のフォルダに入れて、それを含まない配布用のソフトウェアのリリースをロールできるようにします。

すべての必要なクラスとユニットテストがそれぞれ含まれていますか?

通常、アプリケーションクラスごとに1つのテストクラスがあります。したがって、モデルクラスMをお持ちの場合は、テストクラスM_Test(または、あなたが採用している命名規則)をお持ちです。

PHPUnitに詳しくない方は、彼らのドキュメント。

関連する問題