gpt4 book ai didi

java - 运行测试时从项目根目录而不是模块加载 Spring Boot 文件系统资源/配置

转载 作者:行者123 更新时间:2023-12-02 02:55:34 25 4
gpt4 key购买 nike

我有一个 Spring Boot 多模块项目,其根目录中有一个配置文件:

project-root
|
\-- config
| \-- file.yaml
|
\-- module1
| \-- pom.xml
|
\-- module2
| \-- src
| | \-- main
| | | \-- ...
| | \-- test
| | \-- java
| | \-- test.java
| |
| \-- pom.xml
|
\-- module3
| \-- pom.xml
...
|
\-- moduleN
| \-- pom.xml
|
\-- pom.xml

模块中的某些类(例如 project-root/module2/src/main/**.java)使用加载 file.yaml

new FileSystemResource("config/file.yaml");

在他们的构造函数中成功,但是当我运行test.java时,其中包含:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Test.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class Test {

@Autowired
private TestRestTemplate restTemplate;

@Test
public void test() {
String body = this.restTemplate.getForObject("/", String.class);
assertThat(body)...
...
}

...
}

并且资源加载代码被覆盖,我收到一个 FileNotFoundException ,表示 file.yaml 应该在 project-root/module2/config 中code> (而不是 project-root/config)。为什么?

最佳答案

您还没有说明如何运行测试,但是当您使用 Maven 运行测试时,它会将工作目录更改为正在构建和测试的模块的目录。在 Maven 术语中,这称为 basedir 这已记录在 here 中。 。如果您在 IDE 中运行测试,它可能会模仿 Maven 的行为以保持一致性。

关于java - 运行测试时从项目根目录而不是模块加载 Spring Boot 文件系统资源/配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57077298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com