未读取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,为多个配置文件运行所有单元测试