テストされたメソッドと同じクラスの単体テストを書くことと、(同じパッケージまたはexternパッケージの)別のクラスに書き込むことの違いは何ですか? これらのテスト場所のメリットとデメリットは何ですか?単体テスト(java)を書くのに最適な場所?
答えて
この質問に対して「正しい」回答はありません。
同じクラスで書く: プライベートメソッドをテストすることはできますが、コードを混乱させることができます。
同じプロジェクトでの書き込み: 内部メソッド/ロジックをテストできますが、プロジェクトを混乱させてコンパイル時間を延ばすことができます。
外部からの書き込み: プロジェクトの内部メソッド/クラスをテストするのを防ぎますが、テストを "プロダクション"コーダーの外部と外部に保ちます。
プライベートメソッドを直接テストする必要はほとんどありません。プライベートメソッドの一部の機能を非プライベートメソッドでテストできない場合は、その機能が冗長である可能性があります。さらに、実際にこれを行う必要がある場合は、私的メソッドを反映させることができます。 –
私はあなたの意見を反映することに同意しますが、プライベートAPIの変更時にどのテストを変更するかを知りたいとは思っていません。さらに、プライベートメソッドのテストは、目に見えるものをテストするよりも一般的ではありませんが、時にはそれが起こることもあります。とにかく、テストされたクラスの中にテストを書くことは、ほとんどの人がやることではありません。 –
コンパイル時間は大きな問題ではありません。同じ量のコードをコンパイルするには、コードが単一のクラスか2つのどちらであるかにかかわらず、ほぼ同じ時間がかかるはずです。さらに、テストコードが分離されている場合、実際にはコンパイルしないという選択肢があり、時間を節約できます。 –
分離されたクラスで書くことの利点は、コードからテストを分離できることです。 Mavenを持つ例:
は 1.ビルドすべて
2. **/*Test*.java pattern
を含むクラスを実行し、私も知りませんどのようにすることができますあなたのコードよりも、同じクラスのユニットテスト...
あなたが別のクラス(複数可)でテストを持っている場合は、
- あなたの人生は道容易になりますよく知られているユニットテストフレームワークを使用することができます - 私が知っているすべてのものはあなたから離れ、あなたのテストを続けることを前提としていテストed code
- あなたが好きなだけ多くのテストケースを持っています(あなたの生産クラスを巨大で管理しなくてもいい - よく管理されたプロジェクトでは、生産コードと同数のユニットテストコードがあります)あなたのIDEのAPIインデクサーを駆動することがあります)、
- テストなしでプロダクションコードを出荷 - あなたのテスト依存関係も含めて(誰もバンドルしたくない
- プロダクションコード自体に触れずにテストを変更する(これにより、SCMの監査と変更管理が大幅に簡単になり、プロダクトコード/データの変更をテストの変更から分離するのは簡単なので)
テスト方法はコードをテストするためのものです。テストされたクラスにそれらを入れることは、クラスのAPIを混乱させ、クラスのバイトコードと依存関係を必要以上に大きくします。
Calculatorクラスを使用する場合は、testPlusWorks()
とtestMinusWorks()
のテストメソッドは必要ありません。私はちょうどplus()
とminus()
が必要です。 testPlusWorks
がJUnitまたはMockitoライブラリのいくつかのクラスに依存する場合、私はこれらの依存関係を本番環境では望んでいません。クラスをテストするときにのみ役に立ちます。
ベストプラクティスは、検証するコードとは別のテストです。理由は簡単です。アプリケーションでテストをパッケージ化したくないからです。アプリケーションはきれいでなければなりません。テストは外部から機能を検証する必要があります。
多くの場合、テストには依存関係(テストフレームワーク、モックアップライブラリなど)が追加されています。
ソースコードをsrc/main/java
に、src/tests/java
をソースコードにすることが一般的です。
単体テストを別のソースフォルダにまとめて書いておくのが最も良い方法ですが、パッケージ化された(デフォルトの)スコープ付きメソッドと変数にアクセスできるのと同じパッケージに入れてください。
- これは、あなたがビルドを行うと、あなたは 瓶/戦争/耳でテストクラスを除外することができ、ナビゲーションと正気を容易にするために一緒にテストを保持し、
- 。
- 1. オートメーションスクリプトの単体テストを書くには?
- 2. ストップウォッチの単体テストを書くには?
- 3. フォーム要素の単体テストを書く
- 4. EclipseのTestNGで単体テストを書く
- 5. Androidアプリの単体テストに最適なツールは何ですか?
- 6. イベント抽象化の単体テストに最適な方法は?
- 7. iphoneアプリケーションの単体テストに最適なツールは何ですか?
- 8. Visual Studioで単体テストを書くコード
- 9. 私たちのC++コードを書いておくのに最適な場所
- 10. 単体テストMonoTouchプロジェクトに最適な方法は?
- 11. moodle - 一般的なロジックを置くのに最適な場所
- 12. Java SE開発キットをインストールするのに最適な場所
- 13. シンプルなSilverlight単体テストを書くには?
- 14. SSISの学習に最適な場所
- 15. コンパレータを置くのに最適な場所
- 16. 単体テストの書き方
- 17. Java WebAppでアノテーション処理に最適な場所
- 18. JenkinsとSonarqube - 単体テストを実行する場所
- 19. アンドロイドチェックインターネット接続に最適な場所
- 20. 単体テスト用に大きなデータを展開する場所は?
- 21. Visual Studioテストで単体テストでファイルの場所を指定する
- 22. Mac OSXのデータベースファイルの最適な場所
- 23. pythonパッケージのlog.confの最適な場所
- 24. 別のメソッドを含むメソッドで単体テストを書くには?
- 25. 実際のコードの中にPython単体テストを書く
- 26. Python Tornadoアプリケーションの単体テストを書くには?
- 27. スプリング仕様の単体テストを書くには?
- 28. JMockを使って単なるバネの単体テストを書くJDBC DAO
- 29. XcodeでParseで単体テストを書く方法(私の場合はSwift)?
- 30. 単体テストと単体テスト
1つの単語:明瞭さ... – creativeby
類似の質問がここに尋ねられました[http://stackoverflow.com/q/9022547/343266]。 –