Выход Junit и OutOfMemoryError - PullRequest
       13

Выход Junit и OutOfMemoryError

5 голосов
/ 19 сентября 2008

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

Ответы [ 6 ]

3 голосов
/ 19 сентября 2008

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

1 голос
/ 19 сентября 2008

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

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

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

0 голосов
/ 20 сентября 2008

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

Если под «ведением журнала» вы подразумеваете 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 голосов
/ 19 сентября 2008

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

0 голосов
/ 19 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...