2008-09-19 3 views
5

Я запускаю некоторые тесты JUnit для своих приложений. Каждый тест имеет цикл for, вызывающий соответствующий метод 10000 раз. Проверенные методы производят много журналов. Эти журналы также автоматически собираются JUnit в качестве тестового выхода. Эта ситуация относится к OutOfMemoryError, потому что строковый буфер, в котором JUnit сохраняет вывод, становится слишком большим. Мне не нужны эти журналы во время тестов, поэтому, если есть способ сказать JUnit «не сохранять программный вывод», этого будет достаточно. Любые идеи?Junit output и OutOfMemoryError

ответ

3

Какой тип ведения журнала вы используете? Есть ли способ переопределить поведение журнала по умолчанию, чтобы просто игнорировать все сообщения журнала?

1

Некоторые опции:

  1. Изменить вашу регистрацию так, что он сбрасывает в файл вместо стандартного вывода.
  2. Увеличьте максимальный размер кучи с помощью -Xmx <some number>M, например -Xmx 256M.
0

Я бы просто увеличил доступную память. Попробуйте добавить -Xmx256m -Xmx256m на свою виртуальную машину.

0

Решение было переопределяющим каротажные свойства. Теперь я отключил ведение журнала и все, кажется, работает (тест все еще работает). Если он работает, я настрою способ ведения журнала в файл. Спасибо всем (и поздравляю Джеффа & друзей за этот сайт).

0

Я вижу, что ответ был принят уже, но вот что я бы представил, если бы я получил его отпечатали и проходят быстрее:

Если «войдёте» вы имеете в виду System.out.println() или System.err.println(), и если вы уверены, что вашему тесту действительно не нужны журналы, вы можете программно перенаправить stdout и stderr.

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

Таким образом, ваш испытательный выход будет отключен, а другой выход из JUnit не будет, так как это было бы, если вы использовали перенаправление в командной строке, например так:

ant test &> /dev/null 

перенаправление командной строки заставляет перенаправить все выходные данные Ant/JUnit, а не только то, что исходит от класса, который вы тестируете, так что, вероятно, это не то, что вы хотите. Программная переадресация приводит к перенаправлению только строк/записей в System.out и System.err в вашу программу, и вы все равно получите результат от Ant и JUnit.

0

Если это какая-либо помощь, установка outputtoformatters = "no" устраняет все проблемы с памятью (в Ant 1.7.1 это предотвращает вывод, сгенерированный при тестировании тестовыми форматами).