Spring boot:如何在单元测试中从类路径中读取资源

新手上路,请多包涵

我试图在我的单元测试中像这样从类路径中读取一个文件:

 @Value("classpath:state.json")
Resource stateFile;

我在 src/test/resources 目录中有 state.json 文件。当我尝试使用 stateFile.getInputStream() 读取此文件时,它没有返回任何内容。我究竟做错了什么?

我的测试类是这样注释的

@RunWith(SpringRunner.class)
@SpringBootTest

如果我尝试使用不正确的文件,我可以看到代码失败。所以我认为它在类路径中看到了文件,但由于某种原因没有读取内容。

原文由 Nithin Satheesan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

我刚遇到这个。我正在使用 Maven。我查看了我的 target/test-classes 文件夹,我的资源文件不在那里(即使它在我的 src/test/resources 文件夹中)。

我跑了 mvn clean install 然后重新检查了我的目标/测试类文件夹,资源文件现在在那里。在那之后,我的测试能够找到文件并且测试成功了。

因此,在您执行 mvn clean 之前,您的资源似乎不会被复制。 JUnit 正在查找由 maven 构建的类路径,直到文件真正进入 target/test-classes 文件夹,JUnit 才能找到它。

原文由 Collin Krawll 发布,翻译遵循 CC BY-SA 3.0 许可协议

除非定义了属性,否则您无法访问 @Value 资源。应该是这样的。

 @Value("${stateJsonPath}")
Resource stateFile;

如果您必须从硬编码路径获取资源,请使用这种方式。

 Resource stateFile = new ClassPathResource("state.json");

原文由 Praneeth Ramesh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏