¿Cómo establecer los parámetros de JVM para las Pruebas de Unidad Junit?

Tengo algunas pruebas de la unidad Junit que requieren una gran cantidad de espacio de almacenamiento para funcionar, es decir, 1G. (Prueban la funcionalidad de memoria intensiva 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 establecer los parámetros 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 la caja; por lo tanto, si cambio de recuadro (desarrollo en varias máquinas) o si uno de mis colegas intenta ejecutar las pruebas, esas configuraciones no se transfieren. (Además, otros IDE como Eclipse y NetBeans son utilizados por mis colegas.) FWIW, estamos usando mercurial para el control de código fuente.

Para el ciclo de comstackció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 para toda la clase de prueba y los métodos de prueba individuales; y – Me gustaría compartir esas especificaciones entre IDEs en cualquier máquina (habiendo recogido el código del repository).

En IntelliJ puede especificar configuraciones predeterminadas para cada configuración de ejecución. En el diálogo de configuración Ejecutar / Depurar (el que usa para configurar el montón por prueba), haga clic en Predeterminados y JUnit . Esta configuración se aplicará automáticamente a cada nueva configuración de prueba de JUnit. Supongo que existe una configuración similar para Eclipse.

Sin embargo, no existe una opción simple para transferir tales configuraciones (al menos en IntelliJ) a través de los entornos. Puede enviar los archivos del proyecto IntelliJ a su repository: podría funcionar, pero no lo recomiendo.

Ya sabes cómo configurar estos para maven-surefire-plugin . Bueno. Esta es la forma más portátil (ver la respuesta de Ptomli para 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 progtwig independiente. Corresponde al corredor (que sea un corredor autónomo de JUnit, su IDE, maven-surefire-plugin para establecer esas opciones. Dicho esto, no hay una forma “portátil” de configurarlos, de modo que la configuración de la memoria se aplique independientemente de el corredor.

Para darle un ejemplo: no puede definir el parámetro Xmx al desarrollar un servlet; depende del contenedor definirlo. No puede decir: “este servlet siempre debe ejecutarse con Xmx=1G .

En Maven puedes configurar el plugin surefire

  org.apache.maven.plugins maven-surefire-plugin 2.9  -Xmx256M   

Si utiliza Maven para comstackciones, esta configuración se incluirá en el árbol de fonts y se aplicará cuando se realicen las pruebas. Consulte la documentación del plugin Maven Surefire .

Los parámetros se pueden configurar sobre la marcha también.

 mvn test -DargLine="-Dsystem.test.property=test" 

Ver http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html

Estoy de acuerdo con los demás que dijeron que no hay una forma sencilla de distribuir estos ajustes.

Para Eclipse: solicite a sus colegas que configuren lo siguiente:

  • Preferencias de Windows / Java / JRE instalados:
  • Seleccione el JRE / JDK correcto (o hágalo para todos)
  • Editar
  • Argumentos de VM predeterminados: -Xmx1024m
  • Termina, OK.

Después de eso, todas las pruebas se ejecutarán con -Xmx1024m pero desafortunadamente las ha configurado en todas las instalaciones de Eclipse. Tal vez podría crear un paquete Eclipse personalizado que contenga esta configuración y dársela 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.

  • Si Maven pudiera ejecutarlo , la causa de la falla generalmente es la configuración del IDE del desarrollador. El desarrollador debe verificar estas configuraciones.
  • Si Maven tampoco pudo ejecutar la prueba, el desarrollador sabe que la causa de la falla no es el IDE, por lo que podría usar el IDE para depurar la prueba.

De acuerdo con 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 IntelliJ junit vendrá del maven-surefire-plugin, si está configurado.

Este fragmento de pom.xml

   org.apache.maven.plugins maven-surefire-plugin  -Xmx1024m   

parece pasar el argumento -Xmx1024 a la prueba de prueba junit, con IntelliJ 2016.2.4.

Una alternativa específica de eclipse limitada al parámetro JVM de java.library.path permite establecerla para una carpeta de origen específica en lugar de para toda la jdk como se propuso en otra respuesta:

  1. seleccione la carpeta de origen en la que reside el progtwig para comenzar (normalmente fuente / prueba / java)
  2. escriba alt enter para abrir la página de Propiedades para esa carpeta
  3. seleccione nativo en el panel izquierdo
  4. Edita la ruta nativa. La ruta puede ser absoluta o relativa al espacio de trabajo, la segunda es más resistente al cambio.

Para aquellos interesados ​​en detalles sobre por qué maven argline tag debe preferirse a systemProperties uno, mire, por ejemplo:

Recoge archivos nativos JNI en la prueba de Maven (lwjgl)

Puede usar systemPropertyVariables (java.protocol.handler.pkgs es su nombre de argumento JVM):

  org.apache.maven.plugins maven-surefire-plugin 2.12.4   com.zunix.base log4j-core.properties    

http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html