Tengo algunas pruebas unitarias de Junit que requieren una gran cantidad de espacio de almacenamiento para ejecutarse, es decir, 1G. (Ellos prueban la funcionalidad de uso intensivo de memoria para una aplicación webstart que solo se ejecutará con suficiente espacio en el montón y se ejecutará internamente en máquinas Win 7 de 64 bits, por lo que rediseñar las pruebas no es una sugerencia práctica).
Estoy desarrollando en Intellij IDEA, así que sé que puedo configurar los parámetros de JVM (por ejemplo, -Xmx1024M) para la clase de prueba. Sin embargo, esto es solo para ejecutar toda la clase de prueba; si quiero ejecutar una prueba individual, tengo que volver a crear las configuraciones de ejecución para ese método de prueba.
Además, esos son IDE y específicos de caja, por lo que si cambio de caja (desarrollo en varias máquinas) o uno de mis colegas intenta ejecutar las pruebas, esas configuraciones no se transfieren. (Además, mis colegas usan otros IDE como Eclipse y NetBeans). FWIW, estamos usando mercurial para el control del código fuente.
Para el ciclo de compilación, estamos usando Maven, así que sé cómo especificar los parámetros de JVM para eso.
Entonces: - Estoy buscando una forma de especificar los parámetros de JVM que se aplicarán a toda la clase de prueba y los métodos de prueba individuales; y - Me gustaría compartir esas especificaciones entre los IDE en cualquier máquina (habiendo recogido el código del repositorio).
Respuestas:
En IntelliJ puede especificar la configuración predeterminada para cada configuración de ejecución. En el cuadro de diálogo de configuración Ejecutar / Depurar (el que usa para configurar el montón por prueba) haga clic en Valores predeterminados y JUnit . Esta configuración se aplicará automáticamente a cada nueva configuración de prueba JUnit. Supongo que existe una configuración similar para Eclipse.
Sin embargo, no existe una opción simple para transferir dicha configuración (al menos en IntelliJ) entre entornos. Puede enviar archivos de proyecto IntelliJ a su repositorio: podría funcionar, pero no lo recomiendo.
Sabes cómo configurarlos
maven-surefire-plugin
. Bueno. Esta es la forma más portátil (consulte la respuesta de Ptomli para ver un ejemplo).Por lo demás, debe recordar que los casos de prueba de JUnit son solo un grupo de clases de Java, no un programa independiente. Depende del corredor (deje que sea un corredor JUnit independiente, su IDE,
maven-surefire-plugin
para configurar esas opciones. Dicho esto, no hay una forma "portátil" de configurarlas, por lo que la configuración de memoria se aplica independientemente del corredor.Para darle un ejemplo: no se puede definir un
Xmx
parámetro cuando se desarrolla un servlet, depende del contenedor definirlo. No se puede decir: "este servlet siempre debe ejecutarse conXmx=1G
.fuente
En Maven puedes configurar el complemento surefire
Si usa Maven para compilaciones, esta configuración se incluirá en el árbol de fuentes y se aplicará cuando se realicen las pruebas. Consulte la documentación del complemento Surefire de Maven .
fuente
-Xmx256M
que se pase a la línea de comandos de Java al ejecutar sus pruebas unitarias directamente desde IntelliJ. Esto me ha confundidoLos parámetros también se pueden configurar sobre la marcha.
Ver http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
fuente
Según esta pregunta de soporte https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-
el argumento -Xmx para una ejecución de prueba junit de IntelliJ vendrá del complemento maven-surefire-plugin, si está configurado.
Este fragmento de pom.xml
parece pasar el argumento -Xmx1024 a la ejecución de prueba junit, con IntelliJ 2016.2.4.
fuente
Estoy de acuerdo con los demás que dijeron que no hay una forma sencilla de distribuir estos ajustes.
Para Eclipse: pida a sus colegas que configuren lo siguiente:
-Xmx1024m
Después de eso, todas las pruebas se ejecutarán con
-Xmx1024m
pero desafortunadamente lo ha configurado en cada instalación de Eclipse. Tal vez podría crear un paquete Eclipse personalizado que contenga esta configuración y entregárselo a sus compañeros de trabajo.El siguiente proceso de trabajo también podría ayudar: Si el IDE no puede ejecutar una prueba, el desarrollador debe verificar que Maven pueda ejecutar esta prueba o no.
fuente
Puede usar systemPropertyVariables (java.protocol.handler.pkgs es el nombre de su argumento JVM):
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
fuente
Una alternativa específica de eclipse limitada al parámetro de JVM java.library.path permite configurarlo para una carpeta de origen específica en lugar de para todo el jdk como se propone en otra respuesta:
Para aquellos interesados en los detalles sobre por qué la etiqueta maven argline debe preferirse a la de systemProperties, mire, por ejemplo:
Recoger archivos JNI nativos en la prueba de Maven (lwjgl)
fuente
Si lo configura en código Java, puede configurarlo así
referencia:
https://stackoverflow.com/a/60654275/4712855
https://stackoverflow.com/a/10774432/4712855
fuente