Salida de Junit y OutOfMemoryError

votos
5

Estoy ejecutando algunas pruebas JUnit en mis aplicaciones. Cada prueba tiene un bucle for llamando al método respectivo 10000 veces. Los métodos probados producen una gran cantidad de registro. Estos registros también son recopilados automáticamente por JUnit como salida de prueba. Esta situación lleva a OutOfMemoryError porque el búfer de cadena donde JUnit mantiene el resultado se vuelve demasiado grande. No necesito estos registros durante las pruebas, así que si hay una manera de decirle a JUnit no guardes la salida del programa sería suficiente. ¿Algunas ideas?

Publicado el 19/09/2008 a las 17:35
fuente por usuario
En otros idiomas...                            


6 respuestas

votos
3

¿Qué tipo de registro estás usando? ¿Hay alguna forma de que pueda anular el comportamiento de registro predeterminado para ignorar todos los mensajes de registro?

Respondida el 19/09/2008 a las 17:39
fuente por usuario

votos
1

Algunas opciones:

  1. Cambie su registro para que se descargue en un archivo en lugar de la salida estándar.
  2. Aumenta el tamaño máximo de almacenamiento dinámico con -Xmx <some number>M, como -Xmx 256M.
Respondida el 19/09/2008 a las 17:38
fuente por usuario

votos
0

Si es de alguna ayuda, establecer outputtoformatters = "no" resolvió todos mis problemas de memoria (en Ant 1.7.1 esto impide que la salida generada por las pruebas se envíe a los formateadores de prueba).

Respondida el 07/05/2009 a las 00:21
fuente por usuario

votos
0

Veo que ya se aceptó una respuesta, pero esto es lo que habría enviado si lo hubiese escrito y probado más rápido:

Si al "iniciar sesión" te refieres a System.out.println () o System.err.println (), y si estás seguro de que tu prueba realmente no necesita los registros, entonces puedes redirigir stdout y stderr mediante programación.

// Save the original stdout and stderr
PrintStream psOut = System.out;
PrintStream psErr = System.err;
PrintStream psDevNull = null;
try
{
    // Send stdout and stderr to /dev/null
    psDevNull = new PrintStream(new ByteArrayOutputStream());
    System.setOut(psDevNull);
    System.setErr(psDevNull);
    // run tests in loop
    for (...)
    {
    }
}
finally
{
    // Restore stdout and stderr
    System.setOut(psOut);
    System.setErr(psErr);
    if (psDevNull != null)
    {
        psDevNull.close();
        psDevNull = null;
    }
}

De esta forma, su salida de prueba se desactivará, pero la otra salida de JUnit no será, como lo sería si usara la redirección en la línea de comando de esta manera:

ant test &> /dev/null

La redirección de la línea de comando hace que todo el resultado de Ant / JUnit sea redirigido, no solo lo que proviene de la clase que está probando, por lo que probablemente no sea lo que usted quiere. La redirección programática hace que solo las impresiones / escrituras en System.out y System.err en su programa sean redirigidas, y aún obtendrá la salida de Ant y JUnit.

Respondida el 19/09/2008 a las 23:52
fuente por usuario

votos
0

La solución estaba anulando las propiedades de registro. Ahora deshabilité el registro y todo parece funcionar (la prueba aún se está ejecutando). Si funciona, configuraré una forma de iniciar sesión en un archivo. Gracias a todos (y felicitaciones a Jeff y sus amigos por este sitio).

Respondida el 19/09/2008 a las 18:20
fuente por usuario

votos
0

Simplemente aumentaría la memoria disponible. Intente agregar -Xmx256m -Xmx256m a su máquina virtual.

Respondida el 19/09/2008 a las 17:39
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more