执行方法时重定向标准输出和标准错误
Redirect standard output and standard err when executing a method
我有一个程序可以测试 Test#
subclass 中的每个方法并以 JUnit 的 XML 格式输出 XML。
例如:
class ExampleTest : Test
{
Void testOne()
{
...
}
}
我想执行testOne
方法并捕获其中产生的标准输出和标准错误。此 out
和 err
输出将包含在 XML 报告中。
我的第一个想法是查看 sys::Env
。环境 class sys::Env
有 err
和 out
但只读。
我的第二个想法是可以为每个测试方法启动sys::Process
并在其中重定向sys::Process#.err
和sys::Process#.out
,但我担心它会很慢。
还有其他方法吗?
您将无法重定向当前进程的输出(实际上不应该)。
如果输出绝对必须是 stdout/err
- 您将需要走流程路线。您将获得 fork/jvm/stream 设置命中,但与您的测试运行时间相比,这可能可以忽略不计。
更好的选择是使用 Logging API 进行记录 - 这将更好地控制记录的内容以及记录的去向。
我有一个程序可以测试 Test#
subclass 中的每个方法并以 JUnit 的 XML 格式输出 XML。
例如:
class ExampleTest : Test
{
Void testOne()
{
...
}
}
我想执行testOne
方法并捕获其中产生的标准输出和标准错误。此 out
和 err
输出将包含在 XML 报告中。
我的第一个想法是查看 sys::Env
。环境 class sys::Env
有 err
和 out
但只读。
我的第二个想法是可以为每个测试方法启动sys::Process
并在其中重定向sys::Process#.err
和sys::Process#.out
,但我担心它会很慢。
还有其他方法吗?
您将无法重定向当前进程的输出(实际上不应该)。
如果输出绝对必须是 stdout/err
- 您将需要走流程路线。您将获得 fork/jvm/stream 设置命中,但与您的测试运行时间相比,这可能可以忽略不计。
更好的选择是使用 Logging API 进行记录 - 这将更好地控制记录的内容以及记录的去向。