2015-01-07 21 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不會替換該類,因此它不會計入靜態方法調用或識別要驗證的方法,並且在實際發生驗證調用之前測試會完成。

相關問題