2017-10-12 14 views
8

퀘스트에서 this 어떻게 든 that를 해결하기 위해, 나는 maintest 클래스를 분할하는 패키지를 만들기 위해 시도 된 후, 단위 테스트를 실행하기 위해 추가 모듈과 컴파일러를 사용하기 위해 . 매우 좋은 방법은 동의하지 않았지만 지금은 가설적인 구조입니다.경고 : 알 수없는 enum 정수 Status.STABLE

enter image description here

거의 열려있는 질문에 내가 더 진행했다으로 : -

  • 프로젝트에 JDK9 기반 모듈을 추가합니다.
  • IntelliJ의 바로 가기를 사용하여 클래스 경로에 JUnit5를 추가합니다. (lib 폴더) junit-jupiter-api-5.0.0.jar]는 LIB/폴더 opentest4j-1.0.0.jar 함께 가져온다

Q. 참고. 왜 그렇게, 다른 항아리는 무엇에 사용됩니까?

  • 그에 따라 클래스를 추가하고 일부 테스트 메소드를 생성하십시오.

  • 를 컴파일 sample project로 경고에

    javac --module-path lib -d "target" $(find src -name "*.java") 
    

    결과 명령을 사용하여 (단지 사용되는 디렉토리 구조의 그림을 그릴 공유) -

warning: unknown enum constant Status.STABLE 
    reason: class file for org.apiguardian.api.API$Status not found 
warning: unknown enum constant Status.STABLE 
2 warnings 

참고 : -

나는 코드가 JUnit을 사용하여 주석 처리하고 동일한 명령을 실행하면 문제가 발생하지 않으므로 junit-jupiter의 사용법을 알고 있습니다. 그 문제가 있습니다 경우에 사용

라이브러리/도구 : -

  • junit-jupiter-api-5.0.0
  • Java 버전 "9" (build 9+181)
  • 인 IntelliJ 2017.2.5

Q.이 될 수 무엇 그러한 원인에 대한 가능한 원인 경고? 또한, 내 프로젝트 에서뿐만 아니라 프로젝트 수업 외에도 API.Status을 찾을 수 없습니다.

opentest4j

+2

미안 해요, 난 IntelliJ를 함께 테스트되지 않았기 때문에 나는 내 댓글을 삭제하고 당신이 요구하는지 무엇인가 약. 나는 또한 org.apiguardian 패키지를 찾을 수 없다. 그래서 내 생각에 intelliJ와 관련이있다. –

+1

자세한 내용은 https://github.com/junit-team/junit5/issues/1065를 참조하십시오. – Sormuras

+0

@Sormuras 링크를 제공해 주셔서 감사합니다. 그 대답은'org.apiguardian.api' 일지 모르지만 classpath에 junit-jupiter를 포함시키는 것이'opentest4j-1.0.0.jar'을 가져 오는 이유는 무엇입니까? – nullpointer

답변

3

1) opentest4jjunit-jupiter-api의 전이 의존성이다.종속성 그래프를 참조하십시오

+--- org.junit.jupiter:junit-jupiter-api:5.0.1 
    +--- org.opentest4j:opentest4j:1.0.0 
    \--- org.junit.platform:junit-platform-commons:1.0.1 

2) 알 수없는 enum 정수 Status.STABLE

당신은 의존성 다음을 추가해야합니다 apiguardian-api.

dependencies { 
    testCompile 'org.junit.jupiter:junit-jupiter-api:5.0.1' 
    testRuntime 'org.junit.jupiter:junit-jupiter-engine:5.0.1' 
    testCompileOnly 'org.apiguardian:apiguardian-api:1.0.0' 
} 

을 그러나 전반적으로, 종속성 빌드 도구 독립적이다, 그래서 당신은 Gradle을, 또는 없이 일반 IDE에서 작업을 수행 할 수 있습니다 예를 들어

Gradle을 에, 당신은 그것을 통해 할 수있다 Maven.

+1

* transitive dependency * .. 그러나'junit-platform-commons'도 마찬가지입니다. 뭔가 잘못 됐어? – nullpointer

+0

* IntelliJ *를 통해 종속성을 추가하고 있습니다. 따라서 IDE가 중요하다고 생각하지 않을 수도 있습니다. –

+1

* IDE는 중요하다고 생각하지 않습니다. * 강력한 진술입니다. 어떤 증거? – nullpointer

1

컴파일 경고는 단순히 무시할 수 있습니다. 또한 버전 5.1.0 (현재 개발 중)으로 시작하는 더 이상 표시되지 않습니다. 모든 Release Notes에 설명되어 있습니다 :

5.0.1에서는 모든 이슈 대신에 게시 된 메이븐 리딩에서 @API 가디언 JAR에 필수 의존성의 선택이 변경되었습니다.

warning: unknown enum constant Status.STABLE 
reason: class file for org.apiguardian.api.API$Status not found 
: 자바 컴파일러는 주석 형 누락 무시해야하지만 그러나, 많은 사용자는 다음과 같이 javac에 의해 방출 경고의 클래스 경로 결과에 @API 가디언 JAR을하지 않고 테스트를 컴파일하는 것을보고

JUnit 팀은 혼란을 피하기 위해 @API Guardian에 대한 종속성을 JAR 으로 지정하기로했습니다. 다시으로 변경되었습니다. 참고로

도 참조 :