我想在使用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}
答案 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注释。