質問

nunitを使用した単体テスト(および一般的なJava開発)は初めてです。クラスのプライベートメソッドの単体テストを作成する場合、テストファイルはテスト対象のクラスと同じパッケージにある必要があります。単体テストのAPIのエクスポートを回避する一般的な方法は何ですか?クラス/テストメソッドをパッケージで保護できますか?または、開発者は通常、単体テストファイルを除外するリリース用の個別のビルドを持っていますか?

役に立ちましたか?

解決

テストファイルは、テスト対象のクラスと同じパッケージにある必要はありません。実際、テストファイルを完全に別のパッケージに入れて、パッケージレベルの実装の詳細に関係なくパブリックAPIをテストできるようにすることをお勧めします。

代わりに、" Test"を含むファイルを無視するようにビルドスクリプト(Nantなど)を設定できます。リリース実行可能ファイルをビルドするとき。

他のヒント

IntelliJまたはAntに、デプロイメントでJUnitテストをパッケージ化しないように指示できます。ソースコードとは別のディレクトリにテストがあるため、それが可能になります。

ソースとテストのクラスを一緒にしないでください。使用するツール/スクリプトがデプロイしやすいように、それらを分離してください。

個人的には、公開された機能をテストするだけなので、カプセル化された部分のみをテストすることになります。

通常、これにより、テストが容易な、機能が明確に定義された小さなクラスが設計に含まれるようになります。

一般に、単体テストの場合、テスト対象の内部を気にする必要はないので、これがアプローチに最適な方法であると思います。

また、テストコードと製品コードを分離することが最善であることに同意します。

テストソースコードをアプリケーションソースコードから除外します。一般に、公開された機能のみをテストします。プライベート動作を本当にテストする必要がある場合は、実際のオブジェクトを拡張し、プライベート動作へのpublecアクセスを許可するテストオブジェクトを作成します。

テストコードをCUT(テスト対象クラス)のパッケージから移動するのは間違いだと思います。ある時点で、保護されたメソッドまたはクラスをテストしたい場合があります。テストコードを別のパッケージに入れると、それが困難または不可能になります。

より良い解決策は、テストコード用に個別のディレクトリを作成し、本番コードのパッケージ構造を単純にミラーリングすることです。私がやることは次のとおりです。

src/main/java/com/example/Foo.java
src/test/java/com/example/FooTest.java

その後、ビルドスクリプトは、パッケージ化と展開の際に src / test / ** を非常に単純に無視できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top