В последнее время можно использовать что-то вроде http://github.com/google/compile-testing, который позволяет вам запускать задание компиляции для произвольных обработчиков аннотаций, для которых вы можете устанавливать точки останова, выполнять пошаговое выполнение и т. д.
@Test public void testStuff() {
// Create a source file to process, or load one from disk.
JavaFileObject file = JavaFileObjects.fromSourceLines("test.Foo",
"package test;",
"",
"import bar.*;",
"",
"@MyAnnotation(blah=false)",
"interface TestInterface {",
" Bar someBar();",
"}",
// assert conditions following a compilation in the context of MyProcessor.
assert_().about(javaSource()).that(file)
.processedWith(new MyProcessor())
.failsToCompile()
.withErrorContaining("some error message").in(file).onLine(5);
}
Этот тест предполагает, что вы получите сообщение об ошибке, потому что @MyAnnotation неправильно объявлен в тестовом источнике данных. Если это утверждение не выполняется, вы можете запустить его в режиме отладки в своей среде IDE, установить точки останова в MyProcessor и пройти через полную среду компилятора, активную во время отладки.
Для модульного тестирования конкретных методов внутри вашего процессора вы также можете использовать правило @Rule, называемое CompilationRule, из которого вы можете получить служебные классы Elements и Types для более изолированного тестирования определенной логики в вашем компиляторе.
person
Christian Gruber
schedule
06.11.2014