2017-10-12 337 views
8

在尋求解決this不知何故that,我嘗試創建包細分maintest類,然後利用編譯器與添加的模塊來執行單元測試。不是一個很好的方式,但現在只是一個假設的結構。警告:未知的枚舉常量Status.STABLE

enter image description here

一些開放的問題,因爲我還繼續有: -

  • 添加一個基於JDK9模塊項目。
  • 使用IntelliJ的快捷方式將JUnit5添加到類路徑中。 (lib文件夾)[junit-jupiter-api-5.0.0.jar]

Q.注意,它沿着opentest4j-1.0.0.jar到lib /文件夾帶來的。爲什麼是這樣,另一個罐子用於什麼?

  • 添加類並相應地生成一些測試方法。

  • 編譯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-jupiter可疑的用法,因爲如果我使用JUnit註釋掉代碼並執行相同的命令,事情似乎工作正常。

如果可能無關緊要使用的庫/工具: -

  • junit-jupiter-api-5.0.0
  • Java版本"9" (build 9+181)
  • 的IntelliJ 2017.2.5

問:什麼可能是一個可能的原因是這樣的 警告?此外,我無法在我的項目和項目類別之外找到API.Status

+2

對不起,我刪除了我的意見,因爲我沒有用的IntelliJ測試,那就是你問關於。我也無法在任何地方找到'org.apiguardian'軟件包,所以我的猜測是它與intelliJ有關。 –

+1

詳情請參閱https://github.com/junit-team/junit5/issues/1065。 – Sormuras

+0

@Sormuras感謝您的鏈接。雖然這可能會回答'org.apiguardian.api',但它仍然不清楚爲什麼包括junit-jupiter到classpath帶來'opentest4j-1.0.0.jar'? – nullpointer

回答

3

1)opentest4j

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)未知枚舉常量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' 
} 

但總體而言,依賴的是建立工具無關,這樣你就可以做到這一點在普通IDE不搖籃,或Maven

+1

*傳遞依賴* ..但是'junit-platform-commons'也是如此,它並沒有帶來。我在那裏弄錯了什麼? – nullpointer

+0

您正在通過* IntelliJ *添加依賴關係 - 因此,也許IDE並不認爲它很重要。 –

+1

* IDE不認爲它是重要的*這是一個強有力的聲明。任何證明? – nullpointer

1

編譯警告可以簡單地忽略。此外,從5.1.0(目前正在開發)版本開始,它不會再出現。它在Release Notes所有解釋:

在5.0.1中,所有文物被改變有一個可選,而不是在他們發表的Maven的POM的@API衛 JAR託管的依賴。然而,儘管Java編譯器應該忽略缺少註釋類型,很多用戶都報告說,編譯測試,而無需在通過javac發出警告的類路徑的結果看起來是這樣的@API衛 JAR:

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

爲避免混淆,JUnit團隊決定再次依賴於@API Guardian JAR 強制性

僅供參考見: