Java - 如何检查在运行时是否调用动态实例化方法?

时间:2017-04-04 15:08:09

标签: java testing reflection junit invoke

在Java中使用反射,我编写了一些代码来迭代我想要启用的类的名称的arraylist,实例化它们,然后调用一个公共名称' parse(String)的方法'在每个。

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()方法?

谢谢!

1 个答案:

答案 0 :(得分: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())

如果我说的话,请告诉我: - )