Wie erhalte ich eine Testressourcendatei?

Lesezeit: 2 Minuten

In einem Komponententest muss ich eine CSV-Datei importieren. Diese befindet sich im Ressourcenordner, dh src/test/resources

  • Einfache Lösung (Java7+) hier gefunden: stackoverflow.com/a/42375654/1579667

    – Benj

    13. Juni 2018 um 12:48 Uhr

Benutzer-Avatar
AmanicA

Wahrscheinlich nur nützlich, wenn Sie die Datei zur Verfügung haben, zum Beispiel beim Durchführen von Komponententests – dies wird sie AFAIK nicht aus einem JAR laden.

URL url = Thread.currentThread().getContextClassLoader().getResource("mypackage/YourFile.csv");
File file = new File(url.getPath());
// where the file is in the classpath eg. <project>/src/test/resources/mypackage/YourFile.csv

  • Was ich wirklich suchte, war die Abstraktion von der Bereitstellung des Pfads zur Datei, wie in getResourceAsStream. Ansonsten ist new File/getFile einfacher

    – sympathisch

    4. April 2011 um 21:03 Uhr

  • url ist für mich mit dieser Aussage null

    – hitwen

    6. Februar 2013 um 12:59 Uhr

  • @hithwen ok, meine Antwort wurde korrigiert, der von Ihnen angegebene Pfad ist tatsächlich relativ zum Klassenpfad, also sollten Sie die weglassen src/test/resources Teil. (getResource gibt null zurück, wenn es die Datei nicht finden kann)

    – AmanicA

    6. Februar 2013 um 22:21 Uhr

  • die Auflösung der Datei endet mit dem Paket der aktuellen Klasse. @hithwen

    – mönch

    15. Juli 2014 um 19:57 Uhr

  • Brauchen Sie zu verwenden new File(url.toURI()); um Leerzeichen im Dateipfad korrekt zu behandeln.

    – Kolobok

    7. April 2021 um 8:57 Uhr


Sie können mit dem Classloader des aktuellen Threads auf Testressourcen zugreifen:

InputStream stream = Thread.currentThread().getContextClassLoader()
    .getResourceAsStream("YOURFILE.CSV");

  • aber ich möchte eine java.io.File und keinen InputStream.

    – sympathisch

    3. April 2011 um 12:54 Uhr


  • Verwenden Sie dann getClass().getResource(“/src/test/resources/YourFile.csv”); download.oracle.com/javase/6/docs/api/java/lang/Class.html

    – Sean

    3. April 2011 um 13:43 Uhr

  • also FileUtils.toFile(Thread.currentThread().getClass().getResource(“/src/test/resources/YourFile.csv”));

    – sympathisch

    4. April 2011 um 7:10 Uhr

mit Guave

import com.google.common.io.Resources;
URL url = Resources.getResource("YourFile.csv");

  • wie @simpatico will a java.io.Filediese Antwort kann fortgesetzt werden mit: File csvFile = new File( url.toURI() );

    – Abdul

    30. Januar 2015 um 19:09 Uhr

// assuming a file src/test/resources/some-file.csv exists:

import java.io.InputStream;
// ...
InputStream is = getClass().getClassLoader().getResourceAsStream("some-file.csv");

import org.apache.commons.io.FileUtils;
...
 final File dic = FileUtils.getFile("src","test", "resources", "csvFile");

seit Apache Commons IO 2.1.

Benutzer-Avatar
swissonid

Diese Lösung braucht keine lib’s. Erstellen Sie zuerst eine util-Klasse, um auf die Ressourcendateien zuzugreifen.

public class TestUtil(Class classObj, String resourceName) throws IOException{
   URL resourceUrl = classObj.getResource(FileSystems.getDefault().getSeparator()+resourceName);
   assertNotNull(resourceUrl);
   return new File(resourceUrl.getFile());
}

Jetzt müssen Sie nur noch die Methode mit der Klasse Ihres unitTest und dem Namen Ihrer Datei im Ressourcenordner aufrufen.

File cvsTestFile = TestUtil.GetDocFromResource(getClass(), "MyTestFile.cvs");

1179200cookie-checkWie erhalte ich eine Testressourcendatei?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy