有关于测试控制台输出的问题。
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");
}
}
任何人都可以帮我解释为什么会这样吗?
答案 0 :(得分:1)
您的子类使用空方法覆盖超类的setUp
方法。您可以通过添加对超类方法的调用来解决此问题:
@Before
public void setUp(){
super.setUp();
}
或者您可以删除子类中的setUp
方法,如果您不需要在那里执行任何自定义设置。