未读取junit spring boot配置文件属性

Posted

技术标签:

【中文标题】未读取junit spring boot配置文件属性【英文标题】:junit spring boot profile properties not being read 【发布时间】:2018-04-28 10:53:13 【问题描述】:

我正在使用 spring boot 从我的 junit 设置中的属性文件中读取一个值。 我无法读取该值。以下是我的内容:-

application-test.properties

my.user.name=Amar

用于创建 bean 的配置文件:

@Configuration
@ActiveProfiles("test")
@Profile("test")
public class RdbmsTestConfig 

    @Value("$my.user.name")
    private String name;

    @Bean
    public String myString()
        return "Amar";
    

    @Bean
    public PropsHolder propsHolder() 
        PropsHolder propsHolder = new PropsHolder();
        propsHolder.setUserName(name);
        return propsHolder;
    
 

我的测试课:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RdbmsTestConfig.class)
@ActiveProfiles("test")
public class TestRoomService 

    @Autowired
    @Qualifier("myString")
    private String myString;

    @Autowired
    private PropsHolder propsHolder;

    @Autowired
    private Environment env;

    @Test
    public void userTest() 
        Arrays.stream(env.getActiveProfiles()).forEach(System.out::println);
        System.out.println(propsHolder.getUserName());
        Assert.assertNotNull(myString);
        Assert.assertEquals("Amar",myString);
    

propsHolder.getUserName 的值是 $my.user.name

【问题讨论】:

【参考方案1】:

首先从您的班级RdbmsTestConfig 中删除@ActiveProfiles("test")。然后您的测试只是将RdbmsTestConfig 定义为弹簧上下文。如我所见,您没有运行真正的弹簧启动测试。问题是您的 spring 配置中没有配置任何 PropertyPlaceholderConfigurer。因此,如果您有任何 SpringBootApplication,请配置一个 PropertyPlaceholderConfigurer 或将 @SpringBootTest 添加到您的测试中。

【讨论】:

支持这个答案,因为@SpringBootTest 是缺少的链接【参考方案2】:

我从来没有使用过@Profile(),所以我不确定它是否应该做你想做的事。但我总是使用@PropertySources(),否则,代码应该如何知道在哪里查找属性?

@Configuration
@PropertySources(value =  @PropertySource("classpath:core-
test.properties") )

【讨论】:

我想使用 spring 配置文件来设置一些 bean 和配置以在我测试我的应用程序时运行。感谢您建议的方法。我已经尝试过了,它可以单独使用,但不能与配置文件一起使用。【参考方案3】:

我创建了一个具有所需注释的基础测试类:-

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RdbmsTestConfig.class)
@ActiveProfiles("test")
@SpringBootTest
public abstract class BastTest  

@ActiveProfiles 设置要使用的配置文件,我不必在 application.properties 文件中提及它

我的测试类现在扩展了这个:-

public class TestRoomService extends BastTest 

在我的 RdbmsTestConfig 中删除 @ActiveProfiles 注释。

【讨论】:

以上是关于未读取junit spring boot配置文件属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring-boot,使用不同配置文件的 JUnit 测试

springboot怎么读取application.yml文件

Spring Boot / JUnit,为多个配置文件运行所有单元测试

Spring boot 2.3 版本未解决 Org.Junit

Spring boot YAML Config未读取所有值

spring boot web开发 简单的增删改查和spring boot 自带的Junit测试 案例