Java Spring引导访问JUnit测试的application.properties
我正在尝试从Spring Boot应用程序中的JUnit中访问application.properties或application-test.properties 我一直在寻找不同的方法来处理堆栈溢出,只希望使用我的AppConfig类(见下文) 我使用SpringBoot1.5.6版本和Java1.8Java Spring引导访问JUnit测试的application.properties,java,spring,maven,spring-boot,junit,Java,Spring,Maven,Spring Boot,Junit,我正在尝试从Spring Boot应用程序中的JUnit中访问application.properties或application-test.properties 我一直在寻找不同的方法来处理堆栈溢出,只希望使用我的AppConfig类(见下文) 我使用SpringBoot1.5.6版本和Java1.8 以下是我的应用程序的结构: MyService pom.xml src ├───main │ ├───java │ │ └───com
以下是我的应用程序的结构:
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引导应用程序中获取并解析此目录,但是当我试图从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
}
}
对于堆栈溢出,有多种方法可以实现这一点,我将其理解为:
- JUnit类可以从main/resources/application.properties读取application.properties
- 使用
//希望使用我的AppConfig.classthis.class.getClassLoader.getResourceAsStream(…)
将以下注释添加到测试类:
@TestPropertySource(locations="classpath:application-test.properties")
这将使您能够工作:)请注意,您必须导入它:
import org.springframework.test.context.TestPropertySource;
您可以在测试类中使用@TestPropertySource注释
只是注释
@TestPropertySource(“classpath:config/testing.properties”)
在
考试班
您应该能够读取属性,例如使用
@值注释
您的配置如下src/main/resources/config/testing.properties
您的测试类定义了
@MockBean-AppConfig
因此它使用模拟AppConfig而不是加载应用程序属性的真实AppConfig。请避免要求人们以某种方式投票或不投票。这没有帮助,如果你把注意力吸引到不应该投票的事情上,人们可能会更仔细地观察,无论如何都会这样做。无论如何,我们希望这里的投票是有机的。你找到解决办法了吗?
@Value("${fromTest}")
private String fromTest;