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

2022-09-01 20:59:16

我正在尝试从类路径中读取文件,如下所示在我的单元测试中:

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

我在目录中有文件。当我尝试使用 读取此文件时,它不会返回任何内容。我做错了什么?state.jsonsrc/test/resourcesstateFile.getInputStream()

我的测试类是这样注释的

@RunWith(SpringRunner.class)
@SpringBootTest

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


答案 1

我刚刚碰到了这个。我正在使用Maven。我看了一下我的目标/测试类文件夹,我的资源文件不在那里(即使它在我的src/test/resources文件夹中)。

我运行并重新检查了我的目标/测试类文件夹,资源文件现在就在那里。之后,我的测试能够找到该文件,并且测试工作正常。mvn clean install

因此,似乎在执行 .JUnit 正在查找 maven 构建的类路径,直到文件实际进入目标/测试类文件夹,JUnit 将无法找到它。mvn clean


答案 2

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

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

如果必须从硬编码路径中获取资源,请使用此方法。

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

推荐