我不确定是否可行,但如果可行,我该怎么做?我有一个项目,其中包含另外 2 个项目作为依赖项。父项目仅用于测试目的(客户端服务器应用程序)。当我进行测试时,由于客户端和服务器项目的输出量很大,我很难通读我的测试输出。我试图找到一种方法从控制台隐藏我的子项目的所有输出(printf()
),以便我只能看到我的测试输出。有办法吗?
我使用 JUnit 进行测试。
谢谢
最佳答案
您应该使用 Java Logger API(或 Log4J)而不是直接使用 System.out.print
,这样您就可以在执行测试期间禁用特定的记录器。
如果您无法更改遗留代码以使用 Logger API,则有两种选择:
选项 1:
像这样的伪代码创建一个 PrintStream 装饰器类:
public class FilteredPrintStream extends PrintStream {
private final PrintStream stream;
...
@Override
public void print(String str) {
if (notCalledBySubproject()) {
stream.print(str);
}
}
// override other methods too
}
然后设置默认输出:System.setOut(new FilteredPrintStream(System.out));
要查找方法调用者(创建 notCalledBySubproject
方法),请参阅 How do I find the caller of a method using stacktrace or reflection?
选项 2:
在您的测试代码中使用 Logger API,因此您可以将输出重定向到一个文件,例如,然后您忽略控制台输出并查看测试生成的文件。
关于Java - 测试时隐藏系统输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34142161/