2017-10-12 8 views
1

테스트 용으로 Junit 4 Runner에서 Spek을 사용하는 Maven 기반 프로젝트를 작성했습니다.내부 가시성에 대한 Spek 액세스 Kotlin 클래스

나는 프로젝트를 코디로 구성하고 공개 수업을 문서화하거나 가시성을 줄이려면 (유용한) 제안을 받았다.

Kotlin 컴파일러가 테스트를 다른 모듈에있는 것으로 간주하는 것으로 나타났습니다. 따라서 프로젝트 레이아웃에 따라 효과적인 단위 테스트를 수행하는 것이 매우 어렵습니다. 클래스 또는 인터페이스의 가시성이 내부로 축소되면 테스트가 컴파일되지 않습니다.

해결 방법을 제안하십시오. 이 상황에서 내부 가시성 수정 기호를 사용할 수 없습니까? 이 문제를 극복 할 수있는 유용한 컴파일러 구성이나 Spek 구성이 있습니까? 나는 그 제안이 실제로 정확하다고 생각한다; 클래스가 내부적이며 향후 변경 될 수 있거나 문서가 단순히 노력할 가치가 없기 때문에 클래스를 문서화하고 싶지 않습니다.

+0

어떤 Kotlin 버전을 사용하고 있습니까? – raniejade

+0

테스트 목적으로 닫힌 클래스를 "열려면"openall kotlin 플러그인에 대해 들었습니다 : https://kotlinlang.org/docs/reference/compiler-plugins.html – pedrorijo91

+0

그리고 kotlin mock과 같은 무언가가 있다면 솔루션이 거기에 – pedrorijo91

답변

0

결국이 문제는 이미 내부로 표시된 클래스의 하위 클래스 및 필드에 대한 가시성을 응용 프로그램에서 발생시킨 것으로 밝혀졌습니다. Kotlin은 일부 경우이 작업을 수행 할 수 있도록 허용하지만 코드의 다른 곳에서 다른 요소에 대한 가시성을 제한하여 개인 요소를 표시하는 효과가 있습니다. 여러 요소가 같은 파일에 있고 일부가 중첩되어 있기 때문에 정확한 규칙을 적용 할 수 없었습니다.

이러한 문제를 완화하려면 부모가 내부로 표시되면 하위 클래스 또는 필드를 내부로 다시 표시하지 마십시오. 이 경험을 한 후에 나는 많은 종류의 요소를 하나의 파일에 집어 넣는 대신 컴파일 유닛 당 하나의 요소 (Java에서 필요함)를 구성하는 것이 좋습니다. 이렇게하면 혼란이 생길 ​​수 있습니다.

코디시 경고에 의해 일부 코디 제안이 만족스럽지 않을 수도 있습니다 (예 : 내부 인터페이스의 기능을 이중 내부로 표시하는 것은 불가능한 것으로 나타났습니다. 이 연습은 요소 중첩의 일부 조합에서 허용 될 수 있음).