为什么我可以验证静态方法20次并且它不会失败?

时间:2015-01-07 12:06:19

标签: junit mockito powermock

那是我的测试代码:

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());

我想验证类error中的静态方法LogManager,但如何验证此方法20次,但它不会失败。

1 个答案:

答案 0 :(得分:0)

在评论中解决:

  

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

对于上下文,PowerMock通过拦截类加载器并加载调用PowerMock提供的实现而不是原件的替换类来模拟静态类。除非您添加正确的准备工作,否则PowerMock不会替换该类,因此它不会计算静态方法调用或确定要验证的方法,并且测试将在验证调用实际发生之前完成。