実際には、テストするパッケージと同じようにテストパッケージに名前を付けています。したがって、最終的には次のような構造になります。
src/main/Java
com.hello.world
helloWorld.Java
src/test/Java
com.hello.world
helloWorldTest.Java
パッケージ名を指定するだけでは「テスト」と「テストする」を区別できないため、これはかなり賢いとは思えませんでした。一方、これがどういうわけか問題になるようなケースは実際には見つかりません。 (テストケースとソースクラスの)両方のパッケージに同じ命名規則を使用することは良い習慣ですか?そうでない場合、より良いアプローチは何でしょうか?
それは良い慣習です。
場合によっては、パッケージプライベートクラスとメソッドの単体テストも作成する必要があります。別のパッケージに配置された単体テストクラスからそれらを呼び出すことはできません。
本番用コードをコンパイルまたは実行するときにクラスパスに含まれていてはならないので、ユニットテストクラスを同じ名前空間に置くことで混乱が生じることはありません。
これは、パブリックインターフェイス、パブリックファクトリクラス、および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インターフェースの実装を非表示にすることは、有効な設計上の選択になる可能性があります。おそらく、実装を選択するのはファクトリクラスの責任です。
実装はパッケージプライベートであるため、単体テストクラスを直接テストする場合は、同じパッケージに配置する必要があります。ユニットテストクラスが他のパッケージに含まれている場合は、テストからパブリックインターフェイスとファクトリクラスに直接アクセスすることしかできません。