小编Rob*_*key的帖子

Java注释处理器 - 带注释的Kotlin类单元测试

我有一个注释处理器库,我想为Kotlin工作,但是我在单元测试方面遇到了麻烦.如果有人能给我一些建议,我真的很感激.

我目前的单元测试实现使用了Google的编译测试库.我创建输入和输出类并将它们存储在资源目录中.然后在单元测试期间,编译测试库编译输入java类,执行注释处理器,然后将生成的类与资源目录中的预期输出类进行比较.

以下是我所指的示例(来自我的项目): 单元测试类 资源(输入和预期输出类

这对我目前所有基于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)
Run Code Online (Sandbox Code Playgroud)

问题很明显,正在使用不正确的编译器.当我的文件扩展名不是'.java'时,抛出异常本身.如果我尝试使用'.java'文件扩展名加载Kotlin类,则它不起作用,因为它不是正确的Java语法.

有没有人遇到过这个问题并解决了它?我已经看过其他一些注释处理器(例如DBFlow),并且他们没有以这种方式编写单元测试.

由于Kotlin最近刚刚涉足注释处理,或许我是第一个遇到这个问题的人?

java junit unit-testing annotation-processing kotlin

5
推荐指数
1
解决办法
634
查看次数