私は素晴らしいライブラリーを作成したいので、AbstractProcessor
クラスに依存するライブラリーを作成しています。 プリプロセッサはコンパイル時に動作するので、そのコードのテスト方法がわかりません。AbstractProcessorのテスト(コンパイル時のJavaの注釈処理)
ビルドが失敗するテストシナリオがあります。しかし、私はそれをどのようにテストできますか? gradleを実行して終了コードを確認する必要がありますか?予想される原因によってビルドが失敗するかどうかを検証するためのきれいな方法がありますか、また何らかのパーサーを記述する必要がありますか?それはIMHOだけで良いカバー範囲のための巨大なオーバーヘッドになります。例を必要としているあなたのそれらのため
:
@SupportedAnnotationTypes("eu.rekisoft.java.preprocessor.Decorator")
@SupportedSourceVersion(SourceVersion.RELEASE_7)
public class ExamplePreprocessor extends AbstractProcessor {
public ExamplePreprocessor() {
super();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for(Element elem : roundEnv.getElementsAnnotatedWith(Decorator.class)) {
Method method = Method.from((ExecutableElement)elem);
if(!method.matchesTypes(String.class, StringBuilder.class)) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "No! " + elem + " has the wrong args!");
} else {
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Yey " + elem + " this is fine!");
}
}
return true; // no further processing of this annotation type
}
}
そして、ここでは、コンパイルされていないことができクラスです。
public class AnnotationedExample {
@Decorator
public int breakBuild() {
return -1;
}
@Decorator
public String willCompile(StringBuilder sb) {
return null;
}
}
そして最後に退屈な注釈:
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.METHOD)
public @interface Decorator {
}
GitHubでプロジェクトをチェックアウトし、プロジェクトをチェックアウトして01を実行するだけで済みます。。あなたは、linuxとmacのスクリプトに対する不足しているxの権限を修正しなければならないかもしれません。
これまでに作成したコードとテストシナリオを共有してください。何が問題なの? –
ちょうど私が何について話しているのか知りたいですか?それは非常に複雑なトピックであり、あなたがそれに慣れていれば、私の質問の抽象的なレベルはうまくいくはずです。しかし、これにより明確になる場合は、例を追加することができます。 – rekire
@RobertColumbiaここでは、意図したとおりにコンパイルできない簡単なサンプルプロジェクトを紹介します。https://github.com/rekire/AnnotationTestingプロジェクトをチェックアウトし、 'gradlew cJ'を実行するだけです。スクリプトのx権限がありません。 – rekire