Pac*_*ver 7 java junit spring maven spring-boot
我正在尝试从 Spring Boot 应用程序内的 JUnit 访问 application.properties 或 application-test.properties 。
\n\n我不断在 Stack Overflow 上看到不同的方法来执行此操作,并且只想使用我的 AppConfig 类(见下文)。
\n\n我正在使用 Spring Boot 1.5.6 RELEASE 和 Java 1.8
\n\n这是我的应用程序的结构:
\n\nMyService\n pom.xml\n src\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80main\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80java\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80com\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80myservice\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80config\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 AppConfig.java\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80controller\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 UserController.java\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 MyServiceApplication.java \n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80resources\n \xe2\x94\x82 \xe2\x94\x82 application.properties\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80test\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80java\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80com\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80myservice\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80controller\n \xe2\x94\x82 UserControllerTest.java\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80resources\n application-test.properties \nRun Code Online (Sandbox Code Playgroud)\n\ncom.myservice.config.AppConfig:
\n\n@Configuration\npublic class AppConfig {\n\n @Value("${userDir}")\n private String userDir;\n\n // Getters & setters omitted for brevity\n}\nRun Code Online (Sandbox Code Playgroud)\n\n主/资源/application.properties:
\n\nserver.contextPath=/MyService\nserver.port=8080\n\n# users dir\nuserDir=/opt/users\nRun Code Online (Sandbox Code Playgroud)\n\n测试.资源/应用程序测试.属性
\n\n# users dir\nuserDir=/opt/users\nRun Code Online (Sandbox Code Playgroud)\n\n我能够在我的主 Spring Boot 应用程序中获取并解析此目录,但是当我尝试从 JUnit 测试类 getAllUsers() 测试方法中获取它时,我得到一个 NullPointerException :
\n\n@RunWith(SpringRunner.class)\n@WebMvcTest(UserController.class)\n@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)\n@ActiveProfiles("test")\npublic class UserControllerTest {\n\n @Autowired\n MockMvc mvc;\n\n @MockBean\n AppConfig config;\n\n @MockBean\n UserService userService;\n\n @Test\n public void getAllUsers() throws Exception {\n User users = new User(config.getUserDir());\n\n // more lines of code\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n在 Stack Overflow 上,有多种方法可以做到这一点,我将其解读为:
\n\nthis.class.getClassLoader.getResourceAsStream(...)// 希望使用我的 AppConfig.class问题):
\n\n我可能做错了什么,应该从 application.properties 文件还是从 test-properties.file 读取?
如何配置 @ActiveProfiles("test"),我应该在 Maven pom.xml 中的某处设置它吗?
我是否需要将 AppConfig 放在 test/java/com/myservice/config 下的源文件夹中?
将以下注释添加到您的测试类中:
@TestPropertySource(locations="classpath:application-test.properties")
Run Code Online (Sandbox Code Playgroud)
这应该可以帮助您工作:)请注意,您必须导入它:
import org.springframework.test.context.TestPropertySource;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20165 次 |
| 最近记录: |