测试控制台输出

时间:2016-08-24 01:31:51

标签: java testing junit

有关于测试控制台输出的问题。

stdOutput类:

insertText:

现在这是我不明白的事情:

public abstract class StdOutTest {

    private final PrintStream stdOutMock = mock(PrintStream.class);
    private final PrintStream stdOutOrig = System.out;

    @Before
    public void setUp() {
        System.setOut(this.stdOutMock);
    }

    @After
    public void tearDown() {
        System.setOut(this.stdOutOrig);
    }

    protected final PrintStream getStdOutMock() {
        return this.stdOutMock;
    }
}

我使用Mockito进行验证,当我删除setUp()时,此测试通过,但是使用setUp()则失败。失败消息说:

public class test extends StdOutTest{

    @Before
    public void setUp(){
        //empty
    }

    @Test
    public void example(){
        System.out.println("hello");
        verify(getStdOutMock()).println("hello");
    }
}

任何人都可以帮我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您的子类使用空方法覆盖超类的setUp方法。您可以通过添加对超类方法的调用来解决此问题:

@Before
public void setUp(){
    super.setUp();
}

或者您可以删除子类中的setUp方法,如果您不需要在那里执行任何自定义设置。