【问题标题】:How to get a test resource file?如何获取测试资源文件?
【发布时间】:2011-04-03 12:19:33
【问题描述】:

在单元测试中,我需要导入一个 csv 文件。它位于资源文件夹中,即 src/test/resources

【问题讨论】:

标签: java testing resources maven surefire


【解决方案1】:

如果您有可用的文件,例如在进行单元测试时,可能会很有用 - 这不会从 jar AFAIK 中加载它。

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

【讨论】:

  • 我真正想要的是从提供文件路径中抽象出来,就像在 getResourceAsStream 中一样。否则 new File/getFile 更直接
  • url 对我来说是空的
  • @hithwen ok 修复了我的答案,您指定的路径实际上是相对于类路径的,因此您应该省略 src/test/resources 部分。 (如果找不到文件,getResource 返回 null)
  • 文件的分辨率最终包括当前类的包。 @hithwen
  • 需要使用new File(url.toURI());来正确处理文件路径中的空格。
【解决方案2】:

您可以使用当前线程的类加载器访问测试资源:

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

【讨论】:

  • 但我想要一个 java.io.File 而不是 InputStream。
  • 然后使用 getClass().getResource("/src/test/resources/YourFile.csv"); download.oracle.com/javase/6/docs/api/java/lang/Class.html
  • 所以,FileUtils.toFile(Thread.currentThread().getClass().getResource("/src/test/resources/YourFile.csv"));
【解决方案3】:

用番石榴

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

【讨论】:

  • 因为@simpatico 想要java.io.File,这个答案可以继续:File csvFile = new File( url.toURI() );
【解决方案4】:
// assuming a file src/test/resources/some-file.csv exists:

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

【讨论】:

    【解决方案5】:
    import org.apache.commons.io.FileUtils;
    ...
     final File dic = FileUtils.getFile("src","test", "resources", "csvFile");
    

    Apache Commons IO 2.1.

    【讨论】:

      【解决方案6】:

      这个解决方案不需要 lib 的。首先创建一个 util 类来访问资源文件。

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

      现在您只需要使用您的 unitTest 的类和 ressource 文件夹中的文件名来调用该方法。

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

      【讨论】:

      • 在哪里可以获得 FileSystems 类?
      • @ToKra java.nio.file.FileSystems
      猜你喜欢
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 2020-09-09
      • 2021-11-29
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多