Junit + getResourceAsStream Returning Null
Je ne sais pas comment c'est possible. J'ai relu sur getResourceAsStream et ça revient toujours nul.
InputStream source = this.getClass().getResourceAsStream("test.xml");
juste à côté de test.java dans le Finder (en utilisant OS X et Eclipse) est un test.xml
je peux l'ouvrir dans TextWrangler et le voir comme existant avec des données à l'intérieur.
ceci est un test de Junit si cela fait une différence. J'ai regardé les tests Junit existants sur notre système et je l'utilise exactement de la même manière qu'un exemple de travail (comme dans où se trouve le fichier et le code lui-même).
quelle petite différence pourrait-il y avoir pour empêcher getClass() de retourner le bon chemin?
Merci!
11 réponses
getResourceAsStream()
utilise CLASSPATH, et en tant que tel il se chargera de partout où vos classes sont, pas vos fichiers source.
je soupçonne que vous devez copier votre XML dans le même répertoire que le vôtre .fichier de classe.
ce n'est pas trouver la ressource sur le chemin de la classe. Si vous utilisez junit et maven, assurez-vous que les ressources sont copiées sur les classes cible/test en ajoutant <include>
directive file sur <testResource>
Vous pouvez également trouver l'emplacement de votre classe dans le système de fichiers à l'aide de
this.getClass().getResource(".")
et la vérification pour voir si la ressource est là
j'ai toujours des problèmes avec cette méthode. Voici 2 liens qui pourront vous être utiles:
- décrit la différence entre getClass ().getResource (); et getClass ().getClassLoader ().getResource ();
- utilitaire Simple qui simplifie ces 2 approches
j'essaie toujours d'ajouter "/" au début ou "./".
D'après mon expérience, la meilleure méthode est D'utiliser FileInputStream. Il y a seulement un chose à retenir (lors de L'utilisation de FileInputStream avec Eclipse), avec les paramètres par défaut, votre répertoire de travail est défini à projects root. Vous pouvez toujours vérifier où est votre répertoire courant (et quels chemins relatifs vous avez besoin)en utilisant ce morceau de code.
si vous utilisez Maven, Ajoutez cette partie à votre pom.xml
<build>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
</build>
test.xml
et les autres fichiers de ressources doivent être localisés dans src/test/resources
en Supposant que test.xml
est situé juste sous votre test
dossier source racine, faites ceci: -
InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
Essayez MyClass.getResourceAsStream ().
essayez aussi de mettre le test.xml dans votre classpath. Par exemple, dans un projet web Eclipse mettre du texte.xml in webcontent/WEB-INF / classes
à Partir de l'API Java:
trouver une ressource du nom spécifié à partir du chemin de recherche utilisé pour charger les classes. Cette méthode localise la ressource à travers la classe de système loader
ainsi la syntaxe sera par exemple: Chargeur de classe.getSystemResource ("test.XML.)"toString ();
Fonctionne comme un charme!