Java - 测试时隐藏系统输出

标签 java printing junit dependencies project

我不确定是否可行,但如果可行,我该怎么做?我有一个项目,其中包含另外 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/

相关文章:

css - 浏览器打印设置中的默认边距是多少?

java - 依赖常量值的单元测试代码

Java:如何测试调用 System.exit() 的方法?

java - Docker jetty容器JVM内存分配

java - Spring Boot - 如何在一个地方记录所有带有异常的请求和响应?

javascript - 如何在网页中打印适合纸张尺寸(A3、A4、A5 等)的图像?

select - IE9 打印时多选溢出

java - 使用beanIO进行文件转换

java - Java 最好的模拟框架是什么?

java - JUnit 测试方法可以有参数吗?