2017-04-04 48 views
0

在Java中使用反射,我已經編寫了一些代碼來遍歷我希望啓用的類名稱的數組列表,並將它們實例化並依次調用每個中包含通用名稱'parse(String)'的方法。Java - 如何檢查運行時是否調用動態實例化方法?

for (String parser : enabledParses) 
{ 
    Class<?> parserClass = Class.forname(String.format"%s.%s", parserDirectoryPath, parser)); 
    Method parseMethod = parserClass.getMethod("parse", String.class); 
    Object parserObj = null; 

    switch (parser) 
    { 
     case "parser1" : 
      parserObj = parserClass.getConstructor(ConfigWrapper.class, Alerter.class).newInstance(config, alerter); 
      break; 
    ... 
    ... 
    ... 
    } 
    parseMethod.invoke(pluginObj, stringToParse); 

測試時,如何檢查每個已啓用分析程序的parse()方法是否已被調用?

謝謝!

+0

的唯一方式,如果他們被稱爲是如果你添加代碼到這些方法來記錄他們被稱爲,或你檢查通話結果。 –

+0

若要添加侮辱傷害,parse()是一個無效的方法。謝謝你的幫助。 – notfreshprince

回答

0

如果您想驗證某個方法已被調用,您可以使用Mockito,然後使用Mockito.verify(....)。 但是在這種情況下,你的測試是很大的,因爲你的實現太大了,試着做出更好的分解。將它分割成更多的方法,這很簡單。 例如:

List<MyInterface> loadAndCreateInstances(File ...) 

void callParse(List<MyInterface> instances) {} 

然後使用和的Mockito創建嘲笑/ spyed對象的列表(Collections.singletonList(myMock))。驗證:

Mockito.verify(myMock,times(1)).parse(any()) 

讓我知道,如果我說要檢查所有:-)

+0

謝謝,非常有幫助! – notfreshprince

相關問題