質問

ユニットテストの編成について2つの質問があります。

  1. テスト対象のクラスと同じパッケージにテストを配置する必要がありますか、それともテストを異なるパッケージに整理できますか?

    たとえば、有効性およびその他のテストがある場合、同じクラスのものであっても、それらを異なるパッケージに分割するのは正しいですか?

  2. モッククラスとスタブクラスはどうですか?テストのみを含むパッケージからそれらを分離しますか、それとも一緒にしますか?

役に立ちましたか?

解決

JUnitテストケースを実行する方法は、それらを同じパッケージに、ただし別のルートディレクトリに配置することです。 Mavenを使用するため、標準の場所を使用するだけで、次のような構造になります。

src/main/java/com/foo/Bar.java
src/test/java/com/foo/BarTest.java

明らかに構造には他にもありますが、これによりテストをメインラインコードとは別にビルドできますが、保護されたクラスなどにアクセスできます。さまざまな種類のテストに関して、これは非常に主観的です。テスト作業を開始したとき(残念ながら開発後に開始されました)、私は物事をかなり分離した状態に保とうとしました。残念ながら、500以上のテストケースポイントに達すると、すぐに悪夢になりました。それ以来、私はさらに統合を試みました。これにより、維持するコードの量が減りました。しかし、私が言ったように、それは非常に主観的です。

テスト専用コードに関しては、 src / test / java ツリーにのみ存在する別の com.foo.test パッケージに保存します。

他のヒント

私もテストを同じパッケージに入れますが、異なるルートディレクトリの下に置きます。これにより、パッケージ内の他の何かをテストしながら、パッケージプライベートクラスをテストしたり、パッキングプライベートクラスにアクセスしたりできます。これらは、展開された結果からそれらを除外できるようにするために(特に、テストコードが誤って運用コードに入らないようにするため)別のディレクトリツリーに保持されます。ただし、最も重要なのは、あなたの状況に合うものです。

実稼働クラスごとのテストクラスの数に関して、私が見た理論は、フィクスチャごと、つまりセットアップ構造ごとに1つのテストクラスを記述するというものです。多くの場合、それはプロダクションクラスごとに1つのテストクラスと同じ(または十分に近い)ですが、特定のプロダクションクラス、および場合によっては(関連する)プロダクションクラスのグループ用(たとえば、戦略パターンのテスト用)。

ほとんどの場合、理論についてはあまり気にしませんが、必要に応じてテストをやり直し、重複を最小限に抑えます。

テストクラスは、異なるパッケージに入れる必要があります。リリース用にパッケージ化するときに、プロダクションコードからクラスを分離する方が簡単です。私は通常、これらのパッケージにたくさんのテスト用の綿毛を入れています。あらゆる種類のモック、構成、シナリオです。状況によっては、異なるプロジェクトでもテスト用のものを保持することをお勧めします。依存します。

同じパッケージを保持することで、テストのみを介してアクセスすることを目的としたコードに対して、パッケージプライベートの可視性を使用できます。

別のルートディレクトリを使用することについては、それが適切な方法です。 IDEAを使用しているため、IDEAは生産コードがテストコードを参照できないことを認識しています。

それらを別々に保つという点では、ユニットレベルで、プロダクションクラスごとにテストクラスを1つだけ持つことに大きな力があります。もちろん、テストクラスをまったく持たないリファクタリングの一部としてプロダクションで作成されるクラスもありますが、特定のクラスをテストするテストを知りたい場合は、ClassNameTestがClassNameのテストであるという規約があります非常に役立ちます。

TestNGはJUnitよりもこのパラダイムにはるかに友好的です。

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