En realidad, nombramos nuestros paquetes de prueba como sus homólogos de prueba. Entonces terminamos con esta estructura:
src/main/java
com.hello.world
helloWorld.java
src/test/java
com.hello.world
helloWorldTest.java
Siempre sentí que esto no es muy inteligente, ya que no se puede distinguir entre "prueba" y "prueba" si solo se proporciona el nombre del paquete. Por otro lado, no he encontrado un caso en el que esto sea importante de alguna manera. ¿Es una buena práctica tener las mismas convenciones de nomenclatura para ambos paquetes (para los casos de prueba y las clases de origen)? Si no, ¿cuál sería un mejor enfoque?
XXXTest()
decom.hello.world.test.helloWorldTest.java
. El consejo general sería que solo aparezca "Prueba" una vez en la ruta, de modo que (a) use prueba en el nombre del paquete (y nombre el archivo de prueba igual que el archivo bajo prueba) o (b) haga que el nombre del paquete sea mismo y agregue "prueba" al nombre del archivo / clase.Respuestas:
Esa es una buena convención.
A veces, también desea escribir pruebas unitarias para clases y métodos privados de paquetes. No podrá llamarlos desde una clase de prueba unitaria colocada en otro paquete.
No debería haber ninguna confusión acerca de tener clases de prueba unitaria en el mismo espacio de nombres, ya que no deberían estar en la ruta de clase al compilar o ejecutar el código de producción.
Aquí hay un ejemplo de un pequeño módulo con una interfaz pública, una clase de fábrica pública y dos clases de implementación de paquete privado:
Ocultar las implementaciones de la interfaz Transmogrifier podría ser una opción de diseño válida. Quizás es responsabilidad de la clase de la fábrica elegir la implementación.
Dado que las implementaciones son privadas de paquete, debe colocar las clases de prueba unitarias en el mismo paquete si desea probarlas directamente. Si tiene sus clases de prueba de unidad en algún otro paquete, solo tiene acceso directo a la interfaz pública y a la clase de fábrica desde sus pruebas.
fuente
MapTransmogrifier
yListTransmogrifier
y decidir que se podrían hacer en una clase, por lo que se creaListMapTransmogrifier
, modifica la fábrica de usar y eliminar que las dos clases. El código ahora no se compila, por lo que debe modificar cada prueba en ambosMapTransmogrifierTest
yListTransmogrifierTest
hacer que se compile. Una prueba falla. ¿Se debió a cambiar las pruebas o crearListMapTransmogrifier
? Sale el depurador para averiguarlo ... alternativamente, cuando las pruebas usan la fábrica, haces ese refactorizador y todo sigue compilando ...