2017-04-04 47 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

相关问题