【发布时间】:2019-08-23 04:01:29
【问题描述】:
我正在尝试从我的 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
}
main/resources/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
问题:
我可能做错了什么,应该从 application.properties 文件还是从 test-properties.file 读取?
如何配置 @ActiveProfiles("test"),我应该在 Maven pom.xml 中的某个地方进行设置吗?
是否需要将 AppConfig 放在 test/java/com/myservice/config 下的源文件夹中?
【问题讨论】:
-
您的测试类定义了
@MockBean AppConfig config;,因此它使用模拟 AppConfig 而不是加载应用程序属性的真实 AppConfig。 -
请不要以某种方式要求人们投票或不投票。它没有帮助,如果你提请注意不应该投票的事情,人们可能会更仔细地观察并无论如何都会这样做。无论如何,我们希望这里的投票是有机的。
-
您找到解决方案了吗?
标签: java spring maven spring-boot junit