【发布时间】:2017-05-22 13:26:50
【问题描述】:
我有一个注释处理器 library,我想为 Kotlin 工作,但是我在单元测试方面遇到了障碍。如果有人能给我一些建议,我将不胜感激。
我当前的单元测试实现使用 Google 的 compile-testing 库。我创建输入和输出类并将它们存储在资源目录中。然后在单元测试期间,编译测试库编译输入 java 类,执行注解处理器,然后将生成的类与资源目录中预期的输出类进行比较。
这是我所指的示例(来自我的项目): Unit test class Resources (Input and expected output classes
这对于我当前所有基于 java 的单元测试都非常有用。但是,当我尝试使用 Kotlin 类编写一些测试时,我的测试无法加载该类。
我相信这是因为编译测试库首先是一个特定于 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 最近才涉足注释处理,也许我是第一个遇到这个问题的人?
【问题讨论】:
标签: java unit-testing junit kotlin annotation-processing