在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()方法?
谢谢!
答案 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())
如果我说的话,请告诉我: - )