¿Junit prueba sandbox sin red y acceso a archivos?

¿Puedo crear un entorno junit sin sistema de archivos ni acceso a la red? Quiero hacer cumplir reglas más estrictas para nuestros casos de prueba.

Idealmente, esto sería configurable con maven y funcionaría para la fase de prueba predeterminada.

preguntado el 12 de junio de 12 a las 15:06

4 Respuestas

Basado en esta respuesta https://stackoverflow.com/a/309427/116509, creo que podrías establecer un SecurityManager en la configuración de prueba y restaurar el original en el desmontaje.

Sin embargo, en mi humilde opinión, se debe permitir que algunas pruebas unitarias toquen el sistema de archivos, si, por ejemplo, la clase bajo prueba realmente crea archivos como parte de su contrato. (Puede usar la inyección de dependencia para asegurarse de que los archivos se creen en un directorio temporal). Del mismo modo, una buena prueba unitaria de una clase que usa HTTP debería probarla contra un punto final HTTP. De lo contrario, terminará burlándose de todo y su prueba no tendrá ningún valor. Supongo que el valor predeterminado debería ser denegar el acceso, y luego un desarrollador tendría que anular específicamente los permisos para este tipo de prueba.

contestado el 23 de mayo de 17 a las 13:05

Eso funcionó (al menos desde eclipse en mi prueba junit). Actualmente trato de averiguar por qué no funciona en maven. Actualizaré la publicación una vez que lo haya logrado. - Ene

La forma típica de manejar estas dependencias en un sistema de archivos/acceso a la red es simularlas en un contexto de prueba. De esta manera, el código real puede pasar por los canales normales, pero sus pruebas no tienen que depender de un sistema de archivos o una red.

Busque marcos de simulación para ayudarlo a hacer mucho de esto. Habilitar este tipo de prueba también hará que su código sea más limpio. :)

Respondido el 12 de junio de 12 a las 15:06

Hago esto para mis clases/interfaces. Quiero crear una restricción para todos los comitters, para que nadie use accidentalmente la red o el sistema de archivos de Unix como una dependencia. - Ene

Puede usar el Ashcroft para prohibir el acceso al sistema de archivos y otros recursos de sus pruebas. Utiliza el administrador de seguridad de Java para restringir el acceso a ciertos recursos.

Otro enfoque sería usar AspectJ e implementar varios consejos que prohíban llamar a ciertas API o paquetes.

Respondido el 12 de junio de 12 a las 15:06

No estoy seguro de lo que quiere decir con el entorno JUnit, pero no debería necesitar un sistema de archivos o acceso a la red para ejecutar pruebas unitarias. Por otro lado, si está probando código que usa API de red y sistema de archivos, es posible que tenga un problema. En ese caso, es posible que deba abstraer su código en fragmentos comprobables más pequeños. No debe estar probando si la red y las API del sistema de archivos funcionan en una prueba unitaria, estas son pruebas de integración. Solo debes probar tu código en pruebas unitarias.

Respondido el 12 de junio de 12 a las 15:06

Repitió patrones generales de unión, pero ¿cómo puede hacerlos cumplir? - Ene

Las revisiones de código de pares son excelentes para hacer cumplir este tipo de restricciones. Solo conviértalo en una prioridad en una lista de verificación para la aprobación del código. - un hombre de vidrio

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.