web-dev-qa-db-ja.com

テストパッケージの命名規則

実際には、テストするパッケージと同じようにテストパッケージに名前を付けています。したがって、最終的には次のような構造になります。

src/main/Java
    com.hello.world
        helloWorld.Java
src/test/Java
    com.hello.world
        helloWorldTest.Java

パッケージ名を指定するだけでは「テスト」と「テストする」を区別できないため、これはかなり賢いとは思えませんでした。一方、これがどういうわけか問題になるようなケースは実際には見つかりません。 (テストケースとソースクラスの)両方のパッケージに同じ命名規則を使用することは良い習慣ですか?そうでない場合、より良いアプローチは何でしょうか?

11
OddDev

それは良い慣習です。

場合によっては、パッケージプライベートクラスとメソッドの単体テストも作成する必要があります。別のパッケージに配置された単体テストクラスからそれらを呼び出すことはできません。

本番用コードをコンパイルまたは実行するときにクラスパスに含まれていてはならないので、ユニットテストクラスを同じ名前空間に置くことで混乱が生じることはありません。

これは、パブリックインターフェイス、パブリックファクトリクラス、および2つのパッケージプライベート実装クラスを持つ小さなモジュールの例です。

src/main/Java:
    com.hello.transmogrifier
        public interface Transmogrifier
        public class TransmogrifierFactory
        class MapTransmogrifier implements Transmogrifier
        class ListTransmogrifier implements Transmogrifier

scr/test/Java:
    com.hello.transmogrifier
        public class TransmogrifierFactoryTest
        public class MapTransmogrifierTest
        public class ListTransmogrifierTest

Transmogrifierインターフェースの実装を非表示にすることは、有効な設計上の選択になる可能性があります。おそらく、実装を選択するのはファクトリクラスの責任です。

実装はパッケージプライベートであるため、単体テストクラスを直接テストする場合は、同じパッケージに配置する必要があります。ユニットテストクラスが他のパッケージに含まれている場合は、テストからパブリックインターフェイスとファクトリクラスに直接アクセスすることしかできません。

11
COME FROM