Una opción en los últimos tiempos es usar algo como http://github.com/google/compile-testing que le permite invocar el trabajo recopilatorio contra procesadores de anotación arbitrarias, que se pueden establecer puntos de ruptura, paso a paso, etc.
@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);
}
Esta prueba le espera recibirá un mensaje de error porque @MyAnnotation está incorrectamente declarado en la fuente de datos de prueba. Si esta afirmación falla, puede ejecutarla en modo de depuración en su IDE, establecer puntos de interrupción en MyProcessor y avanzar con un entorno de compilación completo activo durante la depuración.
para las pruebas unitarias métodos específicos dentro su procesador, también puede utilizar la llamada @Rule CompilationRule desde donde se puede obtener Elementos y clases de utilidad Tipos con el fin de probar la lógica específica de su compilador de una manera más aislada.
hola, leyendo esta respuesta como aceptada, me hace pensar que es una solución al problema. Por cierto, no entiendo qué significa "invocar el compilador de Java desde Eclipse, usando una configuración de depuración (necesitará crear la configuración manualmente, desde las" Configuraciones de depuración ".) ¿Puede explicar mejor, por favor? Gracias – Apperside
Agregué tools.jar y el procesador jar a un proyecto existente. Luego usé la clase com.sun.tools.javac.Main como se sugirió. Creé una configuración de depuración de aplicaciones Java con tools.jar en classpath y argumentos javac como Argumentos del programa. Funcionó como un encanto, ¡gracias! – wbdarby