java - tutorial - pruebas unitarias pdf
¿Cómo establecer los parámetros de JVM para las Pruebas de Unidad Junit? (7)
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 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 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 repositorio).
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
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Xmx1024m</argLine>
</configuration>
</plugin>
parece pasar el argumento -Xmx1024 a la prueba de prueba junit, con IntelliJ 2016.2.4.
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 repositorio: 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 programa 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
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<argLine>-Xmx256M</argLine>
</configuration>
</plugin>
Si utiliza 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 plugin Maven Surefire .
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.
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
Puede usar systemPropertyVariables (java.protocol.handler.pkgs es su nombre de argumento JVM):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<systemPropertyVariables>
<java.protocol.handler.pkgs>com.zunix.base</java.protocol.handler.pkgs>
<log4j.configuration>log4j-core.properties</log4j.configuration>
</systemPropertyVariables>
</configuration>
</plugin>
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
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:
- seleccione la carpeta de origen en la que reside el programa para comenzar (normalmente fuente / prueba / java)
- escriba alt enter para abrir la página de Propiedades para esa carpeta
- seleccione nativo en el panel izquierdo
- 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: