Comment lire une ressource de fichier texte dans le test d’unité Java?

J’ai un test unitaire qui doit fonctionner avec un fichier XML situé dans src/test/resources/abc.xml . Quelle est la manière la plus simple de récupérer le contenu du fichier dans Ssortingng ?

Enfin, j’ai trouvé une solution intéressante, grâce à Apache Commons :

 package com.example; import org.apache.commons.io.IOUtils; public class FooTest { @Test public void shouldWork() throws Exception { Ssortingng xml = IOUtils.toSsortingng( this.getClass().getResourceAsStream("abc.xml"), "UTF-8" ); } } 

Fonctionne parfaitement. Le fichier src/test/resources/com/example/abc.xml est chargé (j’utilise Maven).

Si vous remplacez "abc.xml" par, par exemple, "/foo/test.xml" , cette ressource sera chargée: src/test/resources/foo/test.xml

Vous pouvez également utiliser les cactos :

 package com.example; import org.cactoos.io.ResourceOf; import org.cactoos.io.TextOf; public class FooTest { @Test public void shouldWork() throws Exception { Ssortingng xml = new TextOf( new ResourceOf("/com/example/abc.xml") // absolute path always! ).asSsortingng(); } } 

Droit au point :

 ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("file/test.xml").getFile()); 

Supposons que l’encodage UTF8 dans le fichier – sinon, ignorez simplement l’argument “UTF8” et utilisera le jeu de caractères par défaut pour le système d’exploitation sous-jacent dans chaque cas.

Un moyen rapide dans JSE 6 – Une bibliothèque simple et sans tiers!

 import java.io.File; public class FooTest { @Test public void readXMLToSsortingng() throws Exception { java.net.URL url = MyClass.class.getResource("test/resources/abc.xml"); //Z means: "The end of the input but for the final terminator, if any" Ssortingng xml = new java.util.Scanner(new File(url.toURI()),"UTF8").useDelimiter("\\Z").next(); } } 

Voie rapide dans JSE 7 (le futur)

 public class FooTest { @Test public void readXMLToSsortingng() throws Exception { java.net.URL url = MyClass.class.getResource("test/resources/abc.xml"); java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI()); Ssortingng xml = new Ssortingng(java.nio.file.Files.readAllBytes(resPath), "UTF8"); } 

Cependant, ni destiné à des fichiers énormes.

Assurez-vous d’abord que abc.xml est copié dans votre répertoire de sortie. Ensuite, vous devriez utiliser getResourceAsStream() :

 InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("test/resources/abc.xml"); 

Une fois que vous avez le InputStream, il vous suffit de le convertir en chaîne. Cette ressource l’explique clairement : http://www.kodejava.org/examples/266.html . Cependant, je vais extraire le code pertinent:

 public Ssortingng convertStreamToSsortingng(InputStream is) throws IOException { if (is != null) { Writer writer = new SsortingngWriter(); char[] buffer = new char[1024]; try { Reader reader = new BufferedReader( new InputStreamReader(is, "UTF-8")); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { is.close(); } return writer.toSsortingng(); } else { return ""; } } 

Avec l’utilisation de Google Guava:

 import com.google.common.base.Charsets; import com.google.common.io.Resources; public Ssortingng readResource(final Ssortingng fileName, Charset charset) throws Exception { try { return Resources.toSsortingng(Resources.getResource(fileName), charset); } catch (IOException e) { throw new IllegalArgumentException(e); } } 

Exemple:

 Ssortingng fixture = this.readResource("filename.txt", Charsets.UTF_8) 

Vous pouvez essayer de faire:

 Ssortingng myResource = IOUtils.toSsortingng(this.getClass().getResourceAsStream("yourfile.xml")).replace("\n",""); 

Voici ce que j’ai utilisé pour obtenir les fichiers texte avec du texte. J’ai utilisé les IOUtils des commons et les ressources de la goyave.

 public static Ssortingng getSsortingng(Ssortingng path) throws IOException { try (InputStream stream = Resources.getResource(path).openStream()) { return IOUtils.toSsortingng(stream); } } 

Vous pouvez utiliser une règle Junit pour créer ce dossier temporaire pour votre test:

@Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); File file = temporaryFolder.newFile(".src/test/resources/abc.xml");