2017-01-08 14 views
3

私は注釈プロセッサーlibraryを持っていますが、私はKotlinで働きたいと思っています。誰かが私に助言を与えることができたら本当に感謝します。Java注釈プロセッサ - 注釈付きKotlinクラス単位テスト

私の現在の単体テスト実装は、Googleのcompile-testingライブラリを使用しています。私は入力と出力のクラスを作成し、それらをresourcesディレクトリに格納します。その後、単体テスト中、コンパイルテストライブラリは入力Javaクラスをコンパイルし、注釈プロセッサを実行し、生成されたクラスをリソースディレクトリの期待される出力クラスと比較します。これは、すべて私の現在のJavaベースのユニットテストのための偉大な作業をされて Unit test class Resources (Input and expected output classes

:ここ

は、私が言及しています何の(私のプロジェクトから)の例です。しかし、私がKotlinクラスを使っていくつかのテストを書くと、私のテストはクラスをロードできません。

私は次の問題を得る現時点で

(私は自分のプロジェクトでKotlinの一切の言及が表示されない)、これはコンパイルテストライブラリは、何よりもまず、Java固有のライブラリであることが原因であると考えています。

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は注釈処理に挑戦しているだけなので、おそらく私はこの問題を最初に持っていますか?

答えて

1

Kotlinは「スタブ」(目標Kotlinクラスと同じセマンティック/メソッド/フィールドを有する空のクラスの死骸)[1]を生成することによって、通常のJava注釈プロセッサと統合します。つまり、kaptのJavaアノテーションプロセッサをユニットテストすることは、本質的に不可能です。テストフローでKotlinツールを何らかの形で統合しても、自分のコードではなくkaptのテストが終了します。

注釈処理コードがKotlinによって生成されたスタブとともに機能するようにするには、スタブジェネレータによって生成される可能性のあるすべての不変量を生成し、通常のJavaコードのようなテスト対象として使用します。