2015-01-07 19 views
0

这是我的测试代码:为什么我可以验证静态方法20次,它不会失败?

public void testApplyListWhenAddTheSameIDThenReturnDuplicateEntityException(){ 
    MyEntity entityRCM = createMyEntity(AGE_ID, WEIGHT_ID, 0L); 
    entityModel.addEntity(entityRCM); 
    MyEntity entityOPC = createMyEntity(DIFF_AGE_ID, WEIGHT_ID, 0L); 
    EntityCreate create = new EntityCreate(entityOPC); 
    List<EntityChange> changeList = new ArrayList<EntityChange>(); 
    changeList.add(create); 
    try { 
     entityModel.apply(changeList); 
     fail(); 
    }catch(DuplicateEntityException e) { 
     PowerMockito.verifyStatic(times(20)); 
     LogManager.error(Mockito.<Logger>anyObject(),Mockito.anyString(),Mockito.<DuplicateEntityException>anyObject()); 
    } 
} 

的问题是在这里:

PowerMockito.verifyStatic(times(20)); 
LogManager.error(Mockito.<Logger>anyObject(),Mockito.anyString(),Mockito.<DuplicateEntityException>anyObject()); 

我想验证一个静态方法errorLogManager类,但我怎么能确认这个方法了二十次,但不会失败。

+0

您是否添加了['@ PrepareForTest'和'mockStatic'](https://code.google.com/p/powermock/wiki/MockitoUsage#Mocking_Static_Method)?如果没有,那么你可能已经设置了你的匹配器和静态调用,但是PowerMock在你的测试完成之前从不会看到实际的调用模拟。 –

+0

是的,谢谢。我已经通过添加mockStatic(LogManager.class)解决了这个问题。并且这就是你所说的“永远不会看到实际的模拟调用”,我试图在没有mockStatic()的情况下verifyStatic() –

回答

0

解决了评论:

你加@PrepareForTest and mockStatic?如果没有,那么你可能已经设置了你的匹配器和静态调用,但是PowerMock在你的测试完成之前从不会看到实际的调用模拟。

对于上下文,PowerMock通过拦截类加载器和加载替换类调​​用PowerMock提供的实施方式,而不是原稿嘲笑静态类。除非您添加正确的准备工作,否则PowerMock不会替换该类,因此它不会计入静态方法调用或识别要验证的方法,并且在实际发生验证调用之前测试会完成。

相关问题