2009-12-04 37 views
39

Tengo una prueba junit java que se ejecuta cuando se ejecuta solo en una máquina de desarrollo. También tenemos un trabajo hudson que ejecuta todas las pruebas, invocadas a través de ant, en un nodo Mac OS X 10.4 con Java 1.5. La prueba estaba pasando en la construcción de Hudson hasta hace poco, pero ahora (sin cambios de código relacionadas) una prueba falla cada vez con el siguiente error:Error de "Forked Java VM anómalamente" de las pruebas junit

mensaje de error

Forked Java VM exited abnormally. Please note the time in the report does not reflect the time until the VM exit.

StackTrace

junit.framework.AssertionFailedError: Forked Java VM exited abnormally. Please note the time in the report does not reflect the time until the VM exit.

googlear muestra que muchos otros parecen haberse encontrado con el mismo problema, pero no pude encontrar ninguna respuesta.

+0

Quizás proporcione el stacktrace completo. –

+0

Pascal: no había stacktrace completo. Aún no encontré ninguna respuesta a esto, pero hemos solucionado el problema trasladando el trabajo hudson a una Mac diferente que ejecuta OS X 10.5 y Java 1.6. El problema no se manifiesta en esta configuración. – Alb

+0

Ese proyecto no está usando JMock, con el parámetro javaagent declarado, ¿verdad? – yihtserns

Respuesta

17

Me enfrenté a un problema similar. Ejecuté las pruebas junit como una tarea de hormiga. Agregué la propiedad showoutput = "yes" ant junit y ejecuté la tarea junit ant. A continuación, mostró la traza de la pila de excepción que provocó la salida de la jvm bifurcada.

1

Tuve este problema y resulta que el proceso en realidad estaba llamando a System.exit(). Sin embargo, también había un error en Ant donde esto aparecía a veces. Creo que Ant 1.7.1 tiene el error corregido. Así que asegúrese de ejecutar esa versión.

3

¿Se bloquea el VM? ¿Puedes encontrar un archivo de volcado (llamado hs_err_pid*.log)? Si ese es el caso, el archivo de volcado le dará pistas sobre por qué se está rompiendo.

+1

¿Qué pasa con la máquina de Windows? – PriWeb

4

Creo que vi este error una vez cuando terminé con varias versiones de junit en mi classpath. Podría valer la pena echarle un vistazo.

0

Tuve exactamente lo mismo hace un tiempo. El problema es que se llama a System.exit() en algún lugar. Sin embargo, puede ser difícil de encontrar, ya que la llamada podría provenir de su código o de una de las bibliotecas que utiliza.

+6

Quienquiera que publique una biblioteca de uso general que llame a System.exit() necesita ser cazado y disparado. –

7

Para mí, era un "java.lang.OutOfMemoryError" en la VM bifurcada (tarea junit con fork = "yes") que hacía que este mensaje apareciera en la VM principal.

OutOfMemory era visible en el registro de hormigas (bueno, es visible ya que todavía está presente).

Uso hormiga 1.7.1, así que no hay esperanza con la actualización de hormiga.

Después de colocar los mismos parámetros de VM en "Ejecutar> Herramientas externas> Herramientas externas> JRE" que en Eclipse.ini (-Xms40m -Xmx512m -XX: MaxPermSize = 256M), el problema está resuelto.

Mantengo el tenedor en "no" para estar seguro y usar los parámetros.

+2

Otra forma de permitir que el proceso junit bifurcado acceda a más memoria (detallado aquí: http://ant.apache.org/manual/Tasks/junit.html) es usar el atributo maxmemory en la tarea junit. –

+0

Es el caso del eclipse, ¿qué podemos hacer cuando corremos con ANT? – PriWeb

0

he resuelto mi problema estableciendo la variable de entorno:

variable: _JAVA_OPTIONS Valor: -Xms128m -Xmx512m

0

Para nosotros, en realidad era que por accidente (se utilizó una versión más reciente de Eclipse) comenzó a usar Ant 1.7.x en lugar de nuestra versión anterior de hormiga, que era compatible con nuestro entorno Weblogic 8.1/JDK 1.4.x. Arreglamos esto cambiando el Ant Home en Eclipse-> Windows-> Preferences-> Ant-> Runtime a nuestra versión anterior de Ant.

Saludos Klas

1

tengo varios frascos junit en mi ruta de clase. uno es de hormiga y otro de WAS. Como lo eliminé, el error desapareció ... La versión Ant que estoy usando 1.8

3

Esto puede ocurrir cuando se lanza una RuntimeException no detectada.Lamentablemente, la tarea junit no genera la excepción, por lo que no hay una manera fácil de determinar la causa raíz. Puede solucionar esto ejecutando el caso de prueba desde la línea de comando donde se mostrará la excepción.

java <vm-args> org.junit.runner.JUnitCore <test-class-name> 

En mi caso, se lanzó una IllegalArgumentException.

0

Tuve el mismo problema. El problema era con la generación de código byte con burla de la clase Config; Cambiamos la importación a

import static org.junit.Assert.assertNotNull; 
import static org.mockito.Mockito.times; 
import static org.mockito.Mockito.verify; 
import static org.mockito.Mockito.when; 

y funcionó.

0

Me enfrenté al problema después de reinstalar una nueva versión de NetBeans en un disco duro externo, actualizando Junit al mismo tiempo y utilizando mi viejo espacio de trabajo.

Para mí la solución al mismo problema era simple:

Basta con añadir el JUnit-Biblioteca para proyectar properties =>Libraries =>Compile Tests y Run Tests.

Entonces, en mi caso, era solo una biblioteca faltante o un conflicto de versión de JUnit.

0

En mi caso, es una excepción no detectada en un inicializador/método/bloque estático dentro de una clase.

Específicamente, tenía una clase que llamaba a un método estático en otra clase y estaba activando una NumberFormatException.

BTW agregar "showoutput = true" a la tarea en build.xml no ayudó a solucionar problemas. Dado que el bloqueo estático es uno de los primeros elementos que se ejecuta, la JVM explotó antes de que pudiera dar salida a nada.

0

Tuve este problema también. Cambio de la tarea de JUnit:

<batchtest fork="yes" ... /> 

a

<batchtest fork="no" ... /> 

fijado por mí. Aunque no entiendo totalmente esta área de la hormiga o por qué esto lo solucionaría. En mi caso, era un error en "BeforeFirstTest" y creo que es barfs debido a dos archivos ant en mi classpath (que es probablemente lo que debería corregir)

Creo que el problema es con una de las versiones de hormiga : http://track.pmease.com/browse/QB-500;jsessionid=C1CF6999CBBDB5097A9CFCF4A11AF6C0?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

ETA: Creo que batchtest = "no" en realidad cambia el classpath y, por lo tanto, da como resultado la exclusión de mi tarro oftálmico ofensivo.

-1

He añadido TestNG biblioteca al Bibliotecas de prueba y se ha solucionado el problema.

0

En mi caso, la ruta de clases que mis pruebas se ejecutan en excedió la longitud máxima de lo permitido por el sistema operativo de una variable de entorno (también conocido como the Linux Classpath too long issue).

La solución fue crear un pathing jar pasos simplificado.:

  1. uso frasco (o su IDE) para hacer una jarra de su proyecto, lo llamaremos MyProject.jar

  2. Ma ke un archivo llamado manifest.txt con el texto

Class-Path: MyProject.jar

  1. Ejecutar la línea de comando jar este

jar cfm PathingJar.jar manifest.txt MyRootPackage/*.class

Luego, en su herramienta de construcción , ejecute su directiva de prueba contra el contenedor de la ruta en sí (no mezcle en otras clases o jarras). Luego pude hacer que mis pruebas se ejecutaran sin esa excepción.

Cuestiones relacionadas