我有一个注解处理器库,我希望它能够在Kotlin中运行,但是我在单元测试方面遇到了一些问题。如果有人能给我一些建议,我将不胜感激。
我的当前单元测试实现使用Google的 compile-testing 库。我创建输入和输出类并将它们存储在资源目录中。然后在单元测试期间, compile-testing 库编译输入Java类,执行注解处理器,然后将生成的类与来自资源目录的预期输出类进行比较。
以下是我参考的项目示例: 单元测试类 资源(输入和预期输出类)
对于我所有当前的基于Java的单元测试,这个方法都非常有效。然而,当我尝试使用Kotlin类编写一些测试时,我的测试无法加载该类。
我相信这是由于 compile-testing 库首先是一个Java特定的库(我在他们的项目中没有看到任何有关Kotlin的提及)
目前,我遇到了以下问题:
java.lang.IllegalArgumentException: Compilation unit is not of SOURCE kind: "/C:/dev/gsonpath/gsonpath-compiler/build/resources/test/adapter/auto/field_types/primitives/valid/TestValidPrimitives.kt"
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:137)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:107)
at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:64)
at com.google.testing.compile.Compilation.compile(Compilation.java:69)
at com.google.testing.compile.JavaSourcesSubject$CompilationClause.compilesWithoutError(JavaSourcesSubject.java:281)
问题很明显,使用了错误的编译器。当我的文件扩展名不是'.java'时,会抛出异常。如果我试图用'.java'文件扩展名加载Kotlin类,它不起作用,因为这不是正确的Java语法。
有人遇到过这个问题并解决了吗?我看了一些其他注解处理器(如DBFlow),它们不以这种方式编写单元测试。
由于Kotlin最近才涉足注解处理,也许我是第一个遇到这个问题的人?