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())
让我知道,如果我说完了:-)
在 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())
让我知道,如果我说完了:-)