2014-03-04 149 views
3

我想捕获静态类中的'logError'方法(在每个方法/字段的意义上都是静态的),并验证它已被调用一些次数通过同一班级的其他方法。使用powermockito验证静态void方法的调用

这种方法是:

public static void logError(Object message){ 
    LOGGER.error(message); // static logger 
} 

我试图对它进行测试:

@Test 
public void errLogTest() throws Exception{ 
    PowerMockito.mockStatic(X.class); 
    PowerMockito.doNothing().when(X.class); 
    X.logError(Mockito.anyString()); 
    X.open(); 
    X.open(); //should log error for opening twice 
    PowerMockito.verifyStatic(Mockito.times(1)); 
} 

我的问题是,无论多少次,我指定,它传递。我删除了嘲笑行为,并知道记录器被调用一次,但我可以有PowerMockito.verifyStatic(Mockito.times(9001));,而且它仍然通过。我如何测试这个?

回答

5

您在verifyStatic之后缺少一行代码。你没有告诉PowerMock 什么来验证。你也在嘲笑全部这个类的静态方法,而不是你不想调用的方法。

@Test 
public void errLogTest() throws Exception{ 
    PowerMockito.spy(X.class); //Used to be: PowerMockito.mockStatic(X.class); 
    PowerMockito.doNothing().when(X.class); 
    X.logError(Mockito.anyString()); 
    X.open(); 
    X.open(); //should log error for opening twice 
    PowerMockito.verifyStatic(Mockito.times(1)); 
    X.logError(Mockito.anyString()); //Now verifyStatic knows what to verify. 
} 

您可能仍然需要做一些调试,因为,在我的经验,设立期望有时调用底层方法反正。

下面是spy的Javadoc:http://static.javadoc.io/org.powermock/powermock-api-mockito/1.5.4/org/powermock/api/mockito/PowerMockito.html#spy(java.lang.Class)

下面是verifyStatic的Javadoc:http://static.javadoc.io/org.powermock/powermock-api-mockito/1.5.4/org/powermock/api/mockito/PowerMockito.html#verifyStatic(org.mockito.verification.VerificationMode)

+0

可以更新的联系? –

+0

完成。我没有使用最新版本,因为我没有重新测试过它。 –

相关问题