执行方法时重定向标准输出和标准错误

Redirect standard output and standard err when executing a method

我有一个程序可以测试 Test# subclass 中的每个方法并以 JUnit 的 XML 格式输出 XML。

例如:

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

我想执行testOne方法并捕获其中产生的标准输出和标准错误。此 outerr 输出将包含在 XML 报告中。

我的第一个想法是查看 sys::Env。环境 class sys::Enverrout 但只读。

我的第二个想法是可以为每个测试方法启动sys::Process并在其中重定向sys::Process#.errsys::Process#.out,但我担心它会很慢。

还有其他方法吗?

您将无法重定向当前进程的输出(实际上不应该)。

如果输出绝对必须是 stdout/err - 您将需要走流程路线。您将获得 fork/jvm/stream 设置命中,但与您的测试运行时间相比,这可能可以忽略不计。

更好的选择是使用 Logging API 进行记录 - 这将更好地控制记录的内容以及记录的去向。