我正在尝试从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
}
}
在堆栈溢出中,有多种方式可以做到这一点,我读为:
this.class.getClassLoader.getResourceAsStream(...)
//希望使用我的AppConfig.class 问题:
我可能在做错什么,应该从application.properties文件还是从test-properties.file读取?
一个如何配置@ActiveProfiles(“ test”),我应该在Maven pom.xml中的某个位置进行设置吗?
我是否需要将AppConfig放置在test / java / com / myservice / config下的源文件夹中?
答案 0 :(得分:0)
在测试类中添加以下注释:
@TestPropertySource(locations="classpath:application-test.properties")
这应该可以使您工作:)请注意,您必须将其导入:
import org.springframework.test.context.TestPropertySource;
答案 1 :(得分:0)
您可以在测试类中使用@TestPropertySource批注。
只需注释
@TestPropertySource("classpath:config/testing.properties")
在您的 测试班。例如,您应该可以使用 @Value注释。
@Value("${fromTest}")
private String fromTest;
您的配置
src/main/resources/config/testing.properties