2017-09-06 2 views
0

J'ai deux projets avec les mêmes dépendances déclarées dans Eclipse. Un ensemble de tests unitaires fonctionne, et l'autre ensemble ne fonctionne pas. J'obtiens une erreur No tests matching [*methodname*]. Certains googlers suggèrent des problèmes de bibliothèque, mais je n'ai pas été en mesure d'identifier où ils pourraient être introduits. Les projets sont presque identiques et le cadre de test (junit, powermock, mockito) devrait être identique. L'affichage du chemin de compilation java dans les préférences -> chemin de construction java montre les mêmes références. Je soupçonne que les menus d'éclipse ne reflètent pas les classes réelles chargées à l'exécution. Existe-t-il un moyen d'écho sur le classpath lors de l'exécution afin que je puisse le scanner pour les doublons? Mise à jour: le problème sous-jacent était que j'avais des versions conflictuelles de junit et powermock sur le chemin de classe. J'ai été capable de résoudre ce problème en supprimant, en réajoutant et en réorganisant les fichiers jars du panneau de configuration du chemin de compilation eclipse. C'était très fastidieux et la solution acceptée ci-dessous aurait considérablement réduit le temps de résolution.Comment puis-je voir les classes sur le classpath java à l'exécution dans un projet non-maven?

cette question a été marquée comme doublon, mais l'article lié est spécifique à maven et ne résout pas le problème sous-jacent de l'affichage d'un chemin de classe lors de l'exécution. la solution acceptée est viable pour les projets menav et non-maven.

+0

Utilisez-vous une bibliothèque supplémentaire comme JUnitParams? J'ai eu un problème similaire hier, la raison pour moi était que le code de préparation des paramètres a déclenché une exception et l'éclipse a montré que 'aucun test ne correspond'. –

+0

Le chemin de classe d'un projet et d'une configuration de lancement/exécution peut différer. Est-ce que les deux configurations de lancement/exécution ont le même classpath? – howlger

+0

si vous utilisiez un vrai système de gestion des dépendances comme Maven, Gradle ou même Ivy, vous n'auriez pas ces problèmes. –

Répondre

1

Il existe plusieurs façons d'enquêter sur le chemin de classe réelle à l'exécution:

  • exécuter votre machine virtuelle Java avec -verbose:class. Cela produira une sortie comme ceci:

    [Loaded java.lang.Object from /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/rt.jar] 
    [Loaded java.io.Serializable from /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/rt.jar] 
    
  • Exécutez le code suivant dans votre JVM:

    ClassLoader classloader = ClassLoader.getSystemClassLoader(); 
    
    URL[] urls = ((URLClassLoader) classloader).getURLs(); 
    
    for (URL url : urls) { 
        System.out.println(url.getFile()); 
    }