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);