Java 使用编译测试对注释处理器进行单元测试时的AssertionError
谷歌的是一个伟大的工具,当谈到单元测试注释处理器。不幸的是,我目前面临以下错误:Java 使用编译测试对注释处理器进行单元测试时的AssertionError,java,unit-testing,annotation-processing,Java,Unit Testing,Annotation Processing,谷歌的是一个伟大的工具,当谈到单元测试注释处理器。不幸的是,我目前面临以下错误: java.lang.AssertionError: An expected source declared one or more top-level types that were not present. Expected top-level types: <[test.LocalStorage]> Declared by expected file: <LocalStorageImpl.
java.lang.AssertionError:
An expected source declared one or more top-level types that were not present.
Expected top-level types: <[test.LocalStorage]>
Declared by expected file: <LocalStorageImpl.java>
The top-level types that were present are as follows:
- [test.LocalStorageImpl] in </SOURCE_OUTPUT/test/LocalStorageImpl.java>
…生成源导致错误。如错误消息所述,它无法解析接口定义
因此,我的问题是如何编译或编写
源代码中定义的接口的源文件,以便generatesSources()
能够识别它?
是否所有源文件都是通过this.processingEnv.getFiler().createSourceFile(名称、原始元素)生成的
?我正在使用JavaPoet的JavaFile.writeTo(文件管理器文件管理器)
,它调用Filer.createSourceFile(文件名,originingelements.toArray(…)代码>在引擎盖下。所以,是的,似乎所有的源文件都是像你提到的那样生成的。是的,这和我们的问题是一样的。我最初的猜测是生成的文件对类加载器不可见。他们似乎没有对此用例进行测试,即使它在他们的文档中。我已经为此问题创建了一个[issue]()。您的所有源文件都是通过this.processingEnv.getFiler().createSourceFile(name,originingElements)
生成的吗?我使用的是JavaPoter的JavaFile.writeTo(Filer Filer)文件管理器)
,调用filer.createSourceFile(文件名,originingElements.toArray(…)代码>在引擎盖下。所以,是的,似乎所有的源文件都是像你提到的那样生成的。是的,这和我们的问题是一样的。我最初的猜测是生成的文件对类加载器不可见。他们似乎没有针对这个用例的测试,即使它在他们的文档中。我已经为这个问题创建了一个[issue]()。
JavaFileObject source = /* interface definition */
JavaFileObject expected_source = /* the generated implementation */
assertAbout(javaSource()).that(source)
.processedWith(new MyProcessor())
.compilesWithoutError()
.and()
.generatesSources(expectedSource);