gpt4 book ai didi

java - Spring Boot 访问 application.properties 以进行 JUnit 测试

转载 作者:行者123 更新时间:2023-12-04 15:46:43 29 4
gpt4 key购买 nike

我正在尝试从我的 Spring Boot 应用程序中的 JUnit 访问 application.properties 或 application-test.properties。

我一直在 Stack Overflow 上看到不同的方法来执行此操作,并且只想使用我的 AppConfig 类(见下文)。

我正在使用 Spring Boot 1.5.6 RELEASE 和 Java 1.8


这是我的应用程序的结构:

MyService
pom.xml
src
├───main
│ ├───java
│ │ └───com
│ │ └───myservice
│ │ ├───config
│ │ │ AppConfig.java
│ │ └───controller
│ │ │ UserController.java
│ │ │
│ │ └─── MyServiceApplication.java
│ ├───resources
│ │ application.properties
└───test
├───java
│ └───com
│ └───myservice
│ └───controller
│ UserControllerTest.java
└───resources
application-test.properties

com.myservice.config.AppConfig:

@Configuration
public class AppConfig {

@Value("${userDir}")
private String userDir;

// Getters & setters omitted for brevity
}

主要/资源/application.properties:

server.contextPath=/MyService
server.port=8080

# users dir
userDir=/opt/users

test.resources/application-test.properties

# users dir
userDir=/opt/users

我能够在我的主要 Spring Boot 应用程序中获取并解析该目录,但是当我尝试从我的 JUnit 测试类 getAllUsers() 测试方法中获取它时,我得到了一个 NullPointerException:

@RunWith(SpringRunner.class)
@WebMvcTest(UserController.class)
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
@ActiveProfiles("test")
public class UserControllerTest {

@Autowired
MockMvc mvc;

@MockBean
AppConfig config;

@MockBean
UserService userService;

@Test
public void getAllUsers() throws Exception {
User users = new User(config.getUserDir());

// more lines of code
}
}

在 Stack Overflow 上有多种方法可以做到这一点,我读作:

  • JUnit 类可以从 main/resources/application.properties 中读取 application.properties。
  • 使用 this.class.getClassLoader.getResourceAsStream(...)//希望使用我的 AppConfig.class

问题:

  1. 我可能做错了什么,它应该只从 application.properties 文件还是从 test-properties.file 读取?

  2. 如何配置 @ActiveProfiles("test"),我是否应该在 Maven pom.xml 的某处设置它?

  3. 我是否需要将 AppConfig 放在 test/java/com/myservice/config 下的源文件夹中?

最佳答案

You can use @TestPropertySource annotation in your test class.

Just annotate @TestPropertySource("classpath:config/testing.properties") on your test class.

You should be able to read out the property for example with the @Value annotation.

@Value("${fromTest}")
private String fromTest;

your config like this src/main/resources/config/testing.properties

关于java - Spring Boot 访问 application.properties 以进行 JUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55464408/

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