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

时间:2017-11-15 09:25:36

标签: java spring spring-boot junit

我想在使用spring boot的junit设置中从属性文件中读取一个值。 我看不懂这个价值。以下是我的内容: -

application-test.properties

my.user.name=Amar

用于创建bean的COnfig文件:

@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}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我从未使用过@Profile(),因此我不确定是否应该按照您的意愿去做。但是我总是使用@PropertySources(),否则,代码应该如何知道在哪里查找属性?

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

答案 2 :(得分:0)

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

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

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

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

public class TestRoomService extends BastTest 

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