方式1:
最原始的方法是通过yml的配置文件读取属性
properrties.yml
test:
prop: only for test
测试
@ContextConfiguration(classes = Application.class) @RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class BeanTest {
@Value("${test.prop}")
private String prop;
@Test
public void test(){
System.out.println(prop);
}
}
控制台输出
only for test
方式2:
通过注解
SpringBootTest(properties = {"test.prop=这个属性会覆盖yam文件中对应的属性"})
properties属性可以为当前测试用例添加临时的属性配置
2.1 yml文件此时没有这个属性,会读取注解中的properties
2.2 yml文件中有这个属性,会被覆盖,仍然读取properties中的属性
优势:比多环境开发中的影响范围更小,仅对当前测试类有效
测试:
@ContextConfiguration(classes = Application.class) @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(properties = {"test.prop=这个属性会覆盖yam文件中对应的属性"}) public class BeanTest { @Value("${test.prop}") private String prop; @Test public void test(){ System.out.println(prop); } } 控制台输出
test.prop=这个属性会覆盖yam文件中对应的属性
方式3:
通过注解
SpringBootTest(args = {"--test.prop=这个属性会覆盖yam文件中对应的属性"})
args属性可以为当前测试用例添加命令行参数
3.1 yml文件此时没有这个属性,会读取注解中的args
3.2 yml文件中有这个属性,会被覆盖,仍然读取args中的属性
测试:
@ContextConfiguration(classes = Application.class) @RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(args = {"--test.prop=djfkasdjoifads"})
public class BeanTest {
@Value("${test.prop}")
private String prop;
@Test
public void test(){
System.out.println(prop);
}
}
控制台输出
djfkasdjoifads
方式4
通过注解
@SpringBootTest(args = {"--test.prop=我是arg,优先级最高,我叫命令行参数"},properties = {"test.prop=这个属性会覆盖yam文件中对应的属性"})
properties属性可以为当前测试用例添加临时的属性配置
args属性可以为当前测试用例添加命令行参数
properties args同时存在 args的优先级更高
4.1 yml文件此时没有这个属性,会读取注解中的args
4.2 yml文件中有这个属性,会被覆盖,仍然读取args 中的属性
4.3 properties有这个属性,会被覆盖,仍然读取args 中的属性
测试:
@ContextConfiguration(classes = Application.class) @RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(args = {"--test.prop=我是arg,优先级最高,我叫命令行参数"},properties = {"test.prop=这个属性会覆盖yam文件中对应的属性"})
public class BeanTest {
@Value("${test.prop}")
private String prop;
@Test
public void test(){
System.out.println(prop);
}
}
控制台输出
我是arg,优先级最高,我叫命令行参数
方式5:
临时bean
@Configuration public class Config { @Bean public String msg(){ return "bean msg"; } }
测试:
@ContextConfiguration(classes = Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@Import(Config.class)
public class ConfigTest {
@Autowired
private String msg;
@Test
public void test(){
System.out.println(msg);
}
}
控制台输出
bean msg