如何覆盖JUnit Test Suite的默认输出

时间:2012-03-29 21:52:25

标签: java testing junit annotations test-suite

我在一个java main方法中运行Junit Test Runner作为TestRunner.run(套件)并在本地运行,并成功运行。我被困住的是我从comamnd行运行的每个测试套件都会产生一个

好的(1次测试)...... 好的(2次测试)......

我不想要这种行为。有什么方法可以摆脱这个吗?我搜索了很多,似乎没有人在解决这个问题。

方法规则和类规则注释似乎是在套件级别处理事物(拦截器)但我无法覆盖junit提供的套件输出

非常感谢任何有关此事的指示

1 个答案:

答案 0 :(得分:1)

TestRunner类上有一个setPrinter(ResultPrinter)方法,允许您覆盖输出结果。您也可以将一个传递给构造函数。默认情况下,打印机为:

new ResultPrinter(System.out);

如果您(例如,ResultPrinter的子类,则可以关闭成功的输出。这样的事情应该有效:

public class MyResultPrinter extends ResultPrinter {
    public MyResultPrinter(PrintStream writer) {
        super(writer);
    }
        @Override
    protected void printFooter(TestResult result) {
        if (result.wasSuccessful()) {
            // just drop the OK messages
        } else {
            // but print the failures
            super.printFooter(result);
        }
    }
}

然后你就像使用它一样:

new TestRunner(new MyResultPrinter(System.out)).run(suite);