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!

30
demandé sur bobber205 2011-03-08 23:37:28

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.

20
répondu Brian Agnew 2011-03-08 20:44:15

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à

26
répondu surajz 2011-06-30 21:12:02

j'ai toujours des problèmes avec cette méthode. Voici 2 liens qui pourront vous être utiles:

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.

11
répondu Sebastian Łaskawiec 2011-03-08 21:12:36

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

9
répondu gumkins 2015-03-26 13:45:27

en Supposant que test.xml est situé juste sous votre test dossier source racine, faites ceci: -

InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
8
répondu limc 2011-03-08 21:51:46

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

1
répondu Paul Croarkin 2011-03-08 21:10:58

à Partir de l'API Java:

http://docs.oracle.com/javase/6/docs/api/java/lang/ClassLoader.html#getSystemResource(java.lang.String)

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!

1
répondu Espen 2013-06-12 09:10:46

j'ai passé beaucoup de temps dans ce problème et il me manquait la configuration suivante: Cliquez avec le bouton droit de la souris sur un projet d'éclipse et sélectionnez Properties - > Java Build Path - > Source et modifier Inclus ligne et ajouter *.propriétés