Перенаправить стандартный вывод и стандартную ошибку при выполнении метода

У меня есть программа, которая тестирует каждый метод в Test# подкласс и выводит XML в формате XML JUnit.

Например:

class ExampleTest : Test
{
  Void testOne()
  {
   ... 
  }
}

Я хочу выполнить testOne метод и захват стандартного вывода и произведенная в нем стандартная ошибка. это out а также err вывод будет включен в отчет XML.

Моей первой идеей было посмотреть на sys::Env, Класс среды sys::Env имеет err а также out но только для чтения.

Моя вторая идея заключается в том, что sys::Process можно запустить для каждого метода тестирования и перенаправить sys::Process#.err а также sys::Process#.out в этом, но я боюсь, что это будет очень медленно.

Есть другой способ сделать это?

1 ответ

Решение

Вы не сможете перенаправить вывод из вашего текущего процесса (и на самом деле не должны).

Если вывод абсолютно должен быть stdout/err - вам нужно идти по маршруту процесса. Вы примете настройку fork/jvm/stream, но это может быть незначительным по сравнению с вашим временем выполнения теста.

Лучшим вариантом будет войти в систему с помощью Logging API - который даст больший контроль над тем, что регистрируется и куда идут вещи.

Другие вопросы по тегам