2017-01-08 9 views
3

나는 단위 테스트의 측면에서 걸림돌을 맞았지만 주석 처리기 library을 가지고 Kotlin에서 일하고 싶습니다. 누군가가 조언을 해줄 수 있다면 정말 고마워.자바 주석 프로세서 - Annotated Kotlin 클래스 단위 테스트

내 현재 단위 테스트 구현은 Google의 compile-testing 라이브러리를 사용합니다. 필자는 입력 및 출력 클래스를 만들고이를 resources 디렉토리에 저장합니다. 그런 다음 단위 테스트 중에 컴파일 테스트 라이브러리는 입력 Java 클래스를 컴파일하고 주석 프로세서를 실행 한 다음 생성 된 클래스를 resources 디렉토리의 예상 출력 클래스와 비교합니다. 이 모든 내 현재 자바 기반 단위 테스트를 위해 큰 노력 Unit test class Resources (Input and expected output classes

: 여기

내가 언급하고있는 무슨의 (내 프로젝트) 예입니다. 그러나 Kotlin 클래스를 사용하여 테스트를 작성하려고하면 클래스를로드 할 수 없습니다.

나는 이것이 내가 다음 문제를 얻는 순간

(I가 자신의 프로젝트에 코 틀린에 대한 언급이 표시되지 않습니다) 맨 먼저 자바 특정 라이브러리되는 컴파일 테스트 라이브러리 때문이라고 생각 :

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

코 틀린은 (목표 코 틀린 클래스와 동일한 의미/방법/필드가 빈 클래스 시체) "스텁"[1]을 생성하여 일반 자바 주석 프로세서와 통합됩니다. 즉, kapt의 단위 테스트 Java 주석 프로세서는 본질적으로 불가능합니다. 테스트 플로우에서 Kotlin 툴링을 어떻게 든 통합하더라도 결국 자신의 코드가 아닌 kapt 테스트가 끝납니다.

주석 처리 코드가 Kotlin 생성 스텁과 함께 작동하도록하려면 스텁 생성기에서 생성 될 수있는 모든 가능한 불변량을 생성하고 일반 Java 코드와 같은 테스트 대상으로 사용하십시오.