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

Java - How to check if dynamically instantiated method is called at runtime?

在 Java 中使用反射,我编写了一些代码来遍历 类 我想要启用的名称的数组列表,实例化它们,然后调用具有通用名称的方法'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() 方法?

谢谢!

如果你想验证调用了某个方法,你可以使用 Mockito 然后 Mockito.verify (....)。 但是在这种情况下你的测试太大了,因为你的实现太大了,尽量做更好的分解。拆分成更多的方法,很简单。 例如:

List<MyInterface> loadAndCreateInstances(File ...)

void callParse(List<MyInterface> instances) {}

然后使用 Mockito 并创建 mocked/spyed 个对象的列表 (Collections.singletonList(myMock))。验证:

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

让我知道,如果我说完了:-)