【问题标题】:Can't access files from src/main/resources via a test-case无法通过测试用例从 src/main/resources 访问文件
【发布时间】:2013-09-18 14:55:30
【问题描述】:

我在src/main/resources 中有一个file.dat

当我尝试测试通过 jar 文件加载此文件的类时,测试失败,因为它无法在路径 (I/O Exception) 中找到该文件。我通过测试得到的路径是:

/home/usr/workspace/project/target/test-classes/file.dat

但是target/test-classes 中不存在该文件有什么想法吗?

【问题讨论】:

  • 为什么会出现在target/test-cases
  • test classPath 是 target/test-classes 所以编译的测试用例会放在那里。

标签: java unit-testing junit


【解决方案1】:

来自src/main/resources 的文件将在主程序运行期间在类路径中可用,而来自src/main/resourcessrc/test/resources 的文件将在测试运行期间在类路径中可用。

检索驻留在类路径中的文件的一种方法是:

Object content = Thread.currentThread().getContextClassLoader().getResource("file.dat").getContent();

.. content 的类型取决于文件内容。您还可以将文件作为 InputStream 获取:

InputStream contentStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("file.dat");

【讨论】:

  • 哦,谢谢@adam-arold,对这么愚蠢的错误感到抱歉
【解决方案2】:

如果文件在

src/main/resources/file.dat

您可以获取文件的 URL:

getClass().getResource("/file.dat");

【讨论】:

  • 实际上返回的是一个 URL 而不是绝对路径。但是你可以从中得出路径。
猜你喜欢
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2015-03-22
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
相关资源
最近更新 更多