Spoon能解析Java源碼形成AST,并且簡化成便于開發人員理解的概念模型,比如類型、方法、接口、注解等常用概念。
Spoon的使用套路是根據源碼構建模型,然后使用模型上的查找方法找到自己需要的元素,創建回調的處理器對找到的元素進行處理。
SpoonAPI spoon = new Launcher();
spoon.addInputResource("src/test/java/");
spoon.buildModel();
for (CtMethod<?> meth : spoon.getModel().getRootPackage().getElements(new TypeFilter<CtMethod>(CtMethod.class) {
@Override
public boolean matches(CtMethod element) {
return super.matches(element) && element.getAnnotation(Test.class) != null;
}
})) {
assertTrue("naming contract violated for "+meth.getParent(CtClass.class).getSimpleName(), meth.getParent(CtClass.class).getSimpleName().startsWith("Test") || meth.getParent(CtClass.class).getSimpleName().endsWith("Test"));
}
上面的例子就是驗證測試類都以Test開始或結束。