我尝试检索Cucumber注释以制作内容辅助插件。但我不知道为什么我的代码不起作用。 reflexion api为method.getDeclaredAnnotations()返回null。
public List<String> getStepDefinition() throws ClassNotFoundException, IOException {
String location = Platform.getPreferencesService().
getString("myPref", "jarLocation", null, null);
if(location != null) {
File f = new File(location);
URL url = f.toURI().toURL();
URL[] urls = new URL[]{url};
URLClassLoader cl = new URLClassLoader(urls);
Class<?> clazz = cl.loadClass("myStepDefinitionFile");
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if(method.isAnnotationPresent(Soit.class)) {
Soit annotation = method.getAnnotation(Soit.class);
annotation.value();
}
}
cl.close();
}
return null;
}
在调试模式下,我看到找到了类,我可以列出所有方法。但我无法列出方法注释。反思api找不到它们。
这是Soit.class
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@StepDefAnnotation
@Documented
public @interface Soit {
/**
* @return a regular expression
*/
String value();
/**
* @return max amount of milliseconds this is allowed to run for. 0 (default) means no restriction.
*/
long timeout() default 0;
}
这是用它注释的方法:
@Override
@Soit("^ok$")
public void ok() {
this.driver.ok();
}