2012-05-09 10 views
0

テストされたメソッドと同じクラスの単体テストを書くことと、(同じパッケージまたはexternパッケージの)別のクラスに書き込むことの違いは何ですか? これらのテスト場所のメリットとデメリットは何ですか?単体テスト(java)を書くのに最適な場所?

+1

1つの単語:明瞭さ... – creativeby

+0

類似の質問がここに尋ねられました[http://stackoverflow.com/q/9022547/343266]。 –

答えて

0

この質問に対して「正しい」回答はありません。

同じクラスで書く: プライベートメソッドをテストすることはできますが、コードを混乱させることができます。

同じプロジェクトでの書き込み: 内部メソッド/ロジックをテストできますが、プロジェクトを混乱させてコンパイル時間を延ばすことができます。

外部からの書き込み: プロジェクトの内部メソッド/クラスをテストするのを防ぎますが、テストを "プロダクション"コーダーの外部と外部に保ちます。

+1

プライベートメソッドを直接テストする必要はほとんどありません。プライベートメソッドの一部の機能を非プライベートメソッドでテストできない場合は、その機能が冗長である可能性があります。さらに、実際にこれを行う必要がある場合は、私的メソッドを反映させることができます。 –

+0

私はあなたの意見を反映することに同意しますが、プライベートAPIの変更時にどのテストを変更するかを知りたいとは思っていません。さらに、プライベートメソッドのテストは、目に見えるものをテストするよりも一般的ではありませんが、時にはそれが起こることもあります。とにかく、テストされたクラスの中にテストを書くことは、ほとんどの人がやることではありません。 –

+0

コンパイル時間は大きな問題ではありません。同じ量のコードをコンパイルするには、コードが単一のクラスか2つのどちらであるかにかかわらず、ほぼ同じ時間がかかるはずです。さらに、テストコードが分離されている場合、実際にはコンパイルしないという選択肢があり、時間を節約できます。 –

0

分離されたクラスで書くことの利点は、コードからテストを分離できることです。 Mavenを持つ例:
は 1.ビルドすべて
2. **/*Test*.java pattern

を含むクラスを実行し、私も知りませんどのようにすることができますあなたのコードよりも、同じクラスのユニットテスト...

4

あなたが別のクラス(複数可)でテストを持っている場合は、

  • あなたの人生は道容易になりますよく知られているユニットテストフレームワークを使用することができます - 私が知っているすべてのものはあなたから離れ、あなたのテストを続けることを前提としていテストed code
  • あなたが好きなだけ多くのテストケースを持っています(あなたの生産クラスを巨大で管理しなくてもいい - よく管理されたプロジェクトでは、生産コードと同数のユニットテストコードがあります)あなたのIDEのAPIインデクサーを駆動することがあります)、
  • テストなしでプロダクションコードを出荷 - あなたのテスト依存関係も含めて(誰もバンドルしたくない
  • プロダクションコード自体に触れずにテストを変更する(これにより、SCMの監査と変更管理が大幅に簡単になり、プロダクトコード/データの変更をテストの変更から分離するのは簡単なので)
0

テスト方法はコードをテストするためのものです。テストされたクラスにそれらを入れることは、クラスのAPIを混乱させ、クラスのバイトコードと依存関係を必要以上に大きくします。

Calculatorクラスを使用する場合は、testPlusWorks()testMinusWorks()のテストメソッドは必要ありません。私はちょうどplus()minus()が必要です。 testPlusWorksがJUnitまたはMockitoライブラリのいくつかのクラスに依存する場合、私はこれらの依存関係を本番環境では望んでいません。クラスをテストするときにのみ役に立ちます。

1

ベストプラクティスは、検証するコードとは別のテストです。理由は簡単です。アプリケーションでテストをパッケージ化したくないからです。アプリケーションはきれいでなければなりません。テストは外部から機能を検証する必要があります。

多くの場合、テストには依存関係(テストフレームワーク、モックアップライブラリなど)が追加されています。

ソースコードをsrc/main/javaに、src/tests/javaをソースコードにすることが一般的です。

0

単体テストを別のソースフォルダにまとめて書いておくのが最も良い方法ですが、パッケージ化された(デフォルトの)スコープ付きメソッドと変数にアクセスできるのと同じパッケージに入れてください。

  1. これは、あなたがビルドを行うと、あなたは 瓶/戦争/耳でテストクラスを除外することができ、ナビゲーションと正気を容易にするために一緒にテストを保持し、
関連する問題