Frage

Ich bin mit ein paar JUnit-Tests auf meine Anwendungen. Jeder Test hat eine for-Schleife Aufruf jeweilige Methode 10000 mal. Die getesteten Methoden erzeugen eine Menge log. Diese Protokolle werden ebenfalls automatisch von JUnit als Testausgang gesammelt. Diese Situation führt zu OutOfMemoryError, da die Zeichenfolge Puffer, in dem JUnit die Ausgabe hält zu groß wird. Ich dont‘müssen diese Protokolle während der Tests, so dass, wenn es eine Möglichkeit, JUnit zu sagen, ist‚nicht halten Programmausgabe‘es ausreichen würde. Irgendwelche Ideen?

War es hilfreich?

Lösung

Welche Art der Protokollierung verwenden Sie? Gibt es irgendeine Art und Weise Sie die Standardprotokollierungsverhalten außer Kraft setzen können nur alle Log-Meldungen zu ignorieren?

Andere Tipps

Einige Optionen:

  1. Ihre Protokollierung ändern, so dass es in eine Datei statt Standardausgabe Dumps.
  2. Erhöhen Sie die maximale Speichergröße mit -Xmx <some number>M, wie -Xmx 256M.

Ich würde den verfügbaren Speicher nur erhöhen .. Versuchen -Xmx256m -Xmx256m zu Ihrer VM hinzuzufügen.

Die Lösung wurde übergeordnete Protokolleigenschaften. Jetzt deaktiviert ich Protokollierung und alles scheint zu funktionieren (Test läuft noch). Wenn es funktioniert, werde ich einen Weg für die Anmeldung in eine Datei konfigurieren. Vielen Dank alle (und Gratulation an Jeff & Freunde für diese Seite).

Ich sehe, dass eine Antwort bereits akzeptiert wurde, aber hier ist, was ich Erklärungen abgegeben haben, wenn ich es abgetippt bekommen hatte und getestet schneller:

Wenn durch „logging“ meinen Sie System.out.println () oder System.err.println (), und wenn Sie sicher sind, dass Ihr Test wirklich nicht die Protokolle benötigt, dann können Sie umleiten stdout und stderr programmatisch.

// 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;
    }
}

Auf diese Weise Ihr Testausgang wird deaktiviert, aber die andere Ausgabe von JUnit wird nicht, wie es sein würde, wenn Sie die Umleitung auf der Kommandozeile wie folgt verwendet:

ant test &> /dev/null

Die Befehlszeile Umleitung führt alle Ant / JUnit Ausgang umgeleitet werden, nicht nur, was aus der Klasse kommt, Sie testen, so das ist wahrscheinlich nicht das, was Sie wollen. Die programmatische Umleitung verursacht nur den Druck / schreibt an System.out und System.err in Ihrem Programm umgeleitet werden, und Sie werden immer noch die Ausgabe von Ant und JUnit erhalten.

Wenn es keine Hilfe, das Setzen von outputtoformatters = „no“ löste meine all Speicherprobleme (in Ant 1.7.1 es diese Ausgabe durch Tests erzeugt verhindert den Testformatierer gesendet werden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top