2017-10-12 13 views
8

Dans la quête pour résoudre this et en quelque sorte that, j'expérimentait pour créer des packages pour lotir main et test les classes, puis d'utiliser du compilateur avec des modules ajoutés pour exécuter les tests unitaires . Pas une très bonne manière d'accord, mais juste une structure hypothétique pour l'instant.avertissement: ENUM inconnu Status.STABLE constante

enter image description here

Peu de questions ouvertes que je continuai plus sont les suivants: -

  • Ajouter un module basé JDK9 au projet.
  • Ajoutez JUnit5 au chemin de classe en utilisant le raccourci d'IntelliJ. (Dossier lib) [junit-jupiter-api-5.0.0.jar]

Q. Notez qu'il apporte le long de la opentest4j-1.0.0.jar dans le répertoire lib/dossier. Pourquoi est-ce ainsi, à quoi sert l'autre pot?

  • Ajoutez les classes et générez une méthode de test correspondante.

  • Compiler le sample project (partagé juste pour dessiner une image de la structure de répertoire lors de l'utilisation) en utilisant la commande

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

    Résultats en avertissements -

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 

Note: -

Je trouve l'utilisation de junit-jupiter suspecte car si je commente le code en utilisant JUnit et exécute la même commande, les choses semblent fonctionner correctement.

Bibliothèques/Outils utilisés si cela peut avoir son importance: -

  • junit-jupiter-api-5.0.0 avec
  • Java Version "9" (build 9+181)
  • IntelliJ 2017.2.5

Q. Que pourrait être un cause probable à un tel Attention? De plus, je suis incapable de trouver le API.Status dans mon projet et en dehors des classes de projet.

+2

Désolé, je supprimé mon commentaire parce que je ne teste avec IntelliJ, et est ce que vous demandez sur. Je ne peux pas non plus trouver ce paquet 'org.apiguardian' n'importe où, donc je suppose qu'il s'agit d'intelliJ. –

+1

Voir https://github.com/junit-team/junit5/issues/1065 pour plus de détails. – Sormuras

+0

@Sormuras Merci pour le lien. Bien que cela puisse répondre à 'org.apiguardian.api' mais ce n'est toujours pas clair pourquoi inclure junit-jupiter dans classpath apporte' opentest4j-1.0.0.jar'? – nullpointer

Répondre

3

1) opentest4j

opentest4j est une dépendance transitive de junit-jupiter-api.Voir le graphique de dépendance:

+--- 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

constante inconnue Vous devez ajouter la dépendance suivante: apiguardian-api.

Par exemple, dans Gradle, vous pouvez le faire via:

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' 
} 

Mais dans l'ensemble, la dépendance est que vous pouvez le faire construire outil indépendant, donc dans IDE plaine sans Gradle, ou Maven.

+1

* Dépendance transitive * .. Mais aussi "junit-platform-commons", qui n'est pas apporté. Est-ce que je me trompe? – nullpointer

+0

Vous ajoutez des dépendances via * IntelliJ * - donc, peut-être que l'EDI ne le considère pas comme important. –

+1

* IDE ne le considère pas comme important * c'est une déclaration forte. Des preuves? – nullpointer

1

L'avertissement de compilation peut simplement être ignoré. De plus, il n'apparaîtra plus à partir de la version 5.1.0 (actuellement en développement). Il est expliqué dans Release Notes:

En 5.0.1, tous les objets ont été modifiés pour avoir une option au lieu d'une dépendance obligatoire sur le @API Gardien JAR dans leurs POMs Maven publiées. Cependant, bien que le compilateur Java doit ignorer les types manquants d'annotation, un grand nombre d'utilisateurs ont signalé que la compilation des tests sans avoir le @API Gardien JAR sur les résultats classpath dans les avertissements émis par javac qui ressemblent à ceci:

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

Pour éviter toute confusion, l'équipe JUnit a décidé de rendre la dépendance au @API Guardian JAR obligatoire de nouveau.

Pour référence, voir aussi: