Spring Boot 2.1:未从application-test.yml加载属性

时间:2019-01-08 01:44:13

标签: spring-boot

我正在尝试在单元测试执行期间从application-test.yml读取属性,但是相反,正在读取application-dev.yml的属性。我没有application.yml文件。感谢帮助。

AppProperties.java

@Component
@ConfigurationProperties(prefix="app")
public class AppProperties {

    private String test;    

    public String getTest() {
        return this.test;
    }

    public void setTest(String test) {
        this.test = test;
    }
}

application-dev.yml

spring:
  profiles: dev
  application:
    name: testApplication
app:
  test: 1

application-test.yml

spring:
  profiles: test
  application:
    name: testApplication
app:
  test: 2

AppServiceTest.java

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {AppProperties.class}, initializers= ConfigFileApplicationContextInitializer.class)
@EnableConfigurationProperties
@ActiveProfiles("test")
public class AppServiceTest{

@Autowired
AppProperties appProperties;

@Test
public void test(){    
    appProperties.getTest();  
    //This returns "1" instead of the desired "2"
}

1 个答案:

答案 0 :(得分:0)

在单元测试类上使用@SpringBootTest注释

  

Spring Boot提供了@SpringBootTest批注,当您需要Spring Boot功能时,可以将其用作标准spring-test @ContextConfiguration批注的替代方法。注释通过创建通过SpringApplication在测试中使用的ApplicationContext来起作用。除了@SpringBootTest,还提供了许多其他批注来测试应用程序的更特定的部分。

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {AppProperties.class}, initializers= 
ConfigFileApplicationContextInitializer.class)
@EnableConfigurationProperties
@SpringBootTest
@ActiveProfiles("test")
public class AppServiceTest{

@Autowired
AppProperties appProperties;

@Test
public void test(){    
appProperties.getTest();  
//This returns "1" instead of the desired "2"
 }