Je ne sais pas comment cela est possible. J'ai relu sur getResourceAsStream et il retourne toujours null.
InputStream source = this.getClass().getResourceAsStream("test.xml");
Juste à côté de test.Java dans le Finder (en utilisant OS X et Eclipse) se trouve test.xml
Je peux l'ouvrir dans TextWrangler et le voir comme existant avec des données à l'intérieur.
Il s'agit d'un test Junit s'il fait une différence. Je suis allé voir les tests Junit existants sur notre système et je les utilise exactement de la même manière qu'un exemple de travail (comme l'emplacement du fichier et le code lui-même).
Quelle petite différence pourrait-il y avoir empêchant je suppose que getClass () de retourner le bon chemin?
Merci!
getResourceAsStream()
utilise le CLASSPATH, et en tant que tel, il se chargera depuis où que soient vos classes, pas vos fichiers source.
Je soupçonne que vous devez copier votre XML dans le même répertoire que votre fichier .class.
Il ne s'agit pas de trouver la ressource sur le chemin de classe. Si vous utilisez junit et maven, assurez-vous que les ressources sont copiées sur les classes cible/test en ajoutant <include>
directive de fichier sur <testResource>
section
Vous pouvez également trouver l'emplacement de votre classe dans le système de fichiers en utilisant
this.getClass().getResource(".")
et vérifier si la ressource est là
Si vous utilisez Maven, ajoutez cette partie à votre pom.xml
<build>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
</build>
Votre test.xml
et les autres fichiers de ressources doivent être situés dans src/test/resources
J'ai toujours un problème avec cette méthode. Voici 2 liens, qui pourraient être utiles:
J'essaie toujours d'ajouter "/" au début ou "./".
D'après mon expérience, la meilleure méthode consiste à utiliser FileInputStream. Il n'y a qu'une seule 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 sur racine des projets. Vous pouvez toujours vérifier où se trouve votre répertoire actuel (et quels chemins relatifs vous avez besoin) en utilisant ce morceau de code .
En supposant test.xml
se trouve juste en dessous de votre dossier source racine test
, procédez comme suit: -
InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
J'ai passé beaucoup de temps dans ce problème et il me manquait la configuration suivante: Faites un clic droit sur un projet Eclipse et sélectionnez Propriétés -> Java Build Path -> Source = et éditez inclus ligne et ajoutez * .properties (* .fileExtension)
De Java API:
Recherchez une ressource du nom spécifié dans le chemin de recherche utilisé pour charger les classes. Cette méthode localise la ressource via le chargeur de classe système
Ainsi, la syntaxe sera par exemple: ClassLoader.getSystemResource ("test.xml"). ToString ();
Fonctionne comme un charme!
Essayez MyClass.getResourceAsStream ().
Essayez également de placer le test.xml dans votre chemin de classe. Par exemple, dans un projet Web Eclipse, mettez text.xml dans webcontent/WEB-INF/classes
J'ai eu ce problème avec un cours de printemps. System.class.getResourceAsStream(...)
fonctionnait dans les tests unitaires mais pas dans Tomcat, Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
travaillait dans Tomcat mais pas dans les tests unitaires.
En fin de compte, je suis allé avec:
ClassUtils.getDefaultClassLoader()
.getResourceAsStream("com/example/mail/templates/invoice-past-due.html"))
J'ai également constaté qu'une fois que je l'avais fait de cette façon, j'avais pas besoin d'avoir le chemin commençant par une barre oblique.
Vous devez mettre la copie de votre fichier de ressources dans les ressources de test, dans mon exemple c'est un fichier de police:
Appelez ensuite à partir de votre test jUnit:
public static InputStream getFontAsStream() throws IOException {
return Thread.currentThread().getContextClassLoader()
.getResourceAsStream("fonts/" + "FreeSans.ttf");
}