2016-08-24 105 views
-2

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

stdOutput类:

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; 
    } 
} 

现在,这里是我不明白:

public class test extends StdOutTest{ 

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

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

我用了的Mockito验证和本次测试通过,当我删除设置()但是setUp()失败。失败消息说:

hello 


Wanted but not invoked: 
printStream.println("hello"); 
-> at observer_test.test.example(test.java:18) 
Actually, there were zero interactions with this mock. 

任何人都可以帮助我,也许为什么会发生这种情况?

+1

你没有调用'System.setOut'来附加模拟。 –

+0

啊哈!谢谢 :) –

回答

1

您的子类使用空方法覆盖超类的setUp方法。您可以通过添加一个调用父类的方法解决这个问题:

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

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