Recomiendo seguir la estructura de directorios estándar de Apache Software Foundation , que produce esto:
module/
src/
main/
java/
test/
java/
Esto mantiene las pruebas separadas de la fuente, pero al mismo nivel en la estructura del directorio. Si lee detenidamente cómo Apache define su estructura, verá que también ayuda a dividir otras preocupaciones, incluidos recursos, archivos de configuración, otros idiomas, etc.
Esta estructura también permite que las pruebas unitarias prueben paquetes y métodos de nivel protegido de las unidades bajo prueba, asumiendo que coloca sus casos de prueba en el mismo paquete que lo que prueban. Con respecto a las pruebas de métodos privados, no me molestaría. Algo más, ya sea público, empaquetado o protegido, los llama y debería poder obtener una cobertura de prueba completa probando esas cosas.
Por cierto, el enlace anterior es a Maven, la herramienta de compilación estándar de Apache. Todos los proyectos de Java que tienen se ajustan a este estándar, así como todos los proyectos que he encontrado que se construyen con Maven.
java
directorio es una adición innecesariamain
ytest
tienen unaresources
carpeta de origen que se compila en la misma carpeta de salida que lajava
carpeta, lo que permite una fácil separación del código Java y los archivos de recursos en el nivel de origen. También me gusta esta estructura porque mantiene el nivel superior libre de múltiples carpetas de origen ... es una organización muy lógica. Y sí, esto no tiene nada que ver con si a uno le gusta o no Maven.La mayoría de las veces se hace así:
Por lo tanto, los mantiene separados y aún puede probar el paquete / la funcionalidad protegida porque la prueba está en el mismo paquete.
No puede probar cosas privadas, a menos que se declare dentro de la propia clase.
En el momento de la entrega, solo empaca lo
.class
generado por src, no las pruebasfuente
En realidad, tiene mucho sentido separar sus proyectos de producción y prueba en 2 entidades separadas, pero tener la misma estructura de paquete en ambos proyectos.
Entonces, si tengo un proyecto 'my-project', también creo 'my-project-test', por lo que tengo la siguiente estructura de directorio:
Este enfoque asegura que las dependencias del código de prueba no contaminen el código de producción.
En mi opinión personal, los paquetes de métodos privados y protegidos deben probarse, así como los métodos públicos. Por lo tanto, quiero mis clases de prueba en el mismo paquete que las clases de producción.
fuente
Así lo tenemos configurado y nos gusta.
Todo el código de prueba se compila en su propio directorio de compilación. Esto se debe a que no queremos que la producción contenga clases de prueba por error.
fuente
Al crear un módulo de biblioteca de Java en Android Studio , crea una clase predeterminada en:
[module] + src/main/java/[com/foo/bar]
Si busca en el
[module].iml
archivo, encontrará esa ruta, así como la ruta para las pruebas, que puede utilizar. El siguiente es un resumen:<module> <component> <content> <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> </content> </component> </module>
Lo que puede hacer en particular es crear un directorio para que las pruebas tengan la siguiente estructura:
[module] + src/main/java/[com/foo/bar] + src/test/java/[com/foo/bar]
La estructura anterior será reconocida por Android Studio y los archivos que se encuentran debajo se incluirán en el módulo.
Supongo que esa estructura es un diseño recomendado para código y pruebas.
fuente