En IntelliJ, ¿cómo depuro un objetivo de prueba de maven?

82

Usando archivos pom de intellij y maven, ¿cómo depuro las pruebas que se ejecutan dentro del objetivo de prueba de maven?

Cuando los ejecuto directamente en el código, se queja de que faltan perfiles, lo cual he marcado dentro de los proyectos Maven de intellij.

JavaRocky
fuente

Respuestas:

25

¿Qué tal si haces clic derecho en tu objetivo y "Depura [tu objetivo]" (en tu caso, el objetivo de la prueba)?

objetivo de depuración

Colin Hebert
fuente
Ahh no pensó en eso. Demasiado tarde un viernes por la tarde: D Gracias.
JavaRocky
23
Suponiendo que desee utilizar puntos de interrupción, esta respuesta es insuficiente. En su lugar, vea la respuesta de Hover.
David Groomes
182

http://maven.apache.org/plugins/maven-surefire-plugin/examples/debugging.html

En IDEA, ejecute su prueba en modo de depuración " mvn -DforkMode=never test"

Actualizado : abra su configuración de ejecución / depuración, en la pestaña "Ejecutor", agregue-DforkMode=never

ingrese la descripción de la imagen aquí

(Observado por @ mikeapr4: uso de versiones más recientes del complemento surefire (2.14+) mvn -DforkCount=0 test)

Hover Ruan
fuente
Eso funcionó para mí. Estoy usando el siguiente comando para depurar el objetivo de la prueba en Idea 10.
Swapnonil Mukherjee
1
En mi proyecto de varios módulos, esta fue la única opción que funcionó para mí desde Intellij.
nash
24
Con IDEA 11, encontré en proyectos de Maven, tuve que hacer clic derecho en la prueba para el módulo que quería probar. Esto creó una configuración de ejecución / depuración. Luego edite esta nueva configuración, haga clic en la pestaña del corredor y agregue -DforkMode = never en las Opciones de VM. Haga clic en Aceptar. Establezca un punto de interrupción, luego haga clic en el ícono de depuración para ejecutar la nueva configuración de depuración. Una combinación de lo anterior, así que gracias por los consejos.
tonto
@MarkM Breakpoints no se respetan en IJ13 para mí al usar este enfoque.
StephenBoesch
9
Vale la pena señalar que las versiones más recientes del uso seguro del complemento (2.14+) mvn -DforkCount=0 test, esto se menciona a continuación en otras respuestas (confusas), pero podrían pasarse por alto.
mikeapr4
28

Ejecuto pruebas con las siguientes opciones:

mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=6666 -Xnoagent -Djava.compiler=NONE" test

... y luego conéctese a Maven con un depurador remoto.

Henryk Konsek
fuente
¿Conseguiste que log4j / logging funcionara? Incluso he incluido el -Dlog4j.configuration = <ruta a log4j.properties> pero las declaraciones de registro no se imprimen.
StephenBoesch
18

-DforkMode=never ya no funciona, ahora está obsoleto en SureFire.

Úselo en su -DforkCount=0lugar cuando use el complemento seguro 2.14+.

DesertBlade
fuente
1
Los documentos Surefire dicen usar forkCounty en su reuseForkslugar, así que creo que lo anterior estaba destinado a decir "Usar en su -DforkCount=0lugar". Lo intenté -DforkCount=0( reuseForksno debería importar si no hay bifurcaciones), pero mi punto de interrupción nunca se disparó. Se dispara con -DforkMode=never(Maven 3.2.1, IDEA 13.1.2).
mmindenhall
9

La pregunta ha sido respondida. Pero solo para compartir mi propia experiencia. La respuesta seleccionada no resolvió mi problema. Mi código tiene varios módulos.

La respuesta del tonto aportó información valiosa a mi problema.

Tengo dos soluciones, 1. Usando su IDEA, agregando una opción de VM -DforkMode=never ; Debe ejecutarlo con el modo de depuración. 2. Configure una depuración remota , especificando el socket y en este caso forkMode no es necesario.

Es solo un resumen de lo que he pasado.

Robin Loxley
fuente
1

La solución de Colin Hebert tampoco me funciona. Pero, por suerte, encontré una manera fácil de depurar la prueba haciendo clic derecho en el triángulo verde que aparece junto al método de prueba:

Ejemplo de clase de prueba de Java

¡Espero que eso te ayude!

David DRM
fuente
1
Publique el código de esa clase y no utilice una imagen.
sentido común
1
Lo que contribuyo con este comentario es una forma de depurar abriendo una ventana en IntelliJ. El código de la clase no es importante.
David DRM