如何在没有构建 spring 上下文的情况下在 JUnit 5 测试中填充 yml 属性 文件
How to populate yml property file in JUnit 5 test without build spring context
假设我有一项服务从 application.yml
文件中获取了一个 属性 文件:
orders:
batch-size: 2
并通过@Value注解读取:
@Value("${orders.batch-size}")
private String ordersBatchSize;
进行数据分区。
我正在编写 JUnit 测试,并希望从资源中的 application.yml
文件中获取上述 属性。问题是 JUnit 测试 属性 始终为空。我的 JUnit class 测试用 @ExtendWith(MockitoExtension.class)
注释。
我不想通过用 @SpringBootTest
注释 class 来构建 Spring 上下文。
根据 ,我需要填充 属性 文件,但我可能尝试了所有方法但没有得到理想的结果。
目前尝试次数:
ReflectionTestUtils.setField(classUnderTest, "field", "value")
或
Yaml yaml = new Yaml();
InputStream inputStream =this.getClass().getClassLoader().getResourceAsStream("application.yml");
yaml.load(inputStream);
或
Properties properties = new Properties();
properties.load(new FileReader("/application.properties"));
或
System.setProperty("orders.batch-size", "2");
或:
public static Properties fetchProperties() {
Properties properties = new Properties();
try {
File file = ResourceUtils.getFile("classpath:application.yml");
InputStream in = new FileInputStream(file);
properties.load(in);
} catch (IOException e) {
// exception logic
}
return properties;
}
或来自 主题的提示,但没有带来理想的解决方案。
如果您能提供有关如何解决此问题的建议,我将不胜感激。干杯!
首先,类型应该是整数。
@Value("${orders.batch-size}")
private Integer ordersBatchSize;
然后使用反射实用程序是一种很常见的方法。请注意字段名称必须匹配。
ReflectionTestUtils.setField(classUnderTest, "ordersBatchSize", 100)
更好的方法是在用 @BeforeEach
注释的方法中使用 setter(如果可用)。
@BeforeEach
public void beforeEach() {
classUnderTest.setOrdersBatchSize(100);
}
最后,最好的方法是在test/resources
文件夹中定义application.yml
,Spring Boot优先进行测试:
orders.batch-size=100
假设我有一项服务从 application.yml
文件中获取了一个 属性 文件:
orders:
batch-size: 2
并通过@Value注解读取:
@Value("${orders.batch-size}")
private String ordersBatchSize;
进行数据分区。
我正在编写 JUnit 测试,并希望从资源中的 application.yml
文件中获取上述 属性。问题是 JUnit 测试 属性 始终为空。我的 JUnit class 测试用 @ExtendWith(MockitoExtension.class)
注释。
我不想通过用 @SpringBootTest
注释 class 来构建 Spring 上下文。
根据
目前尝试次数:
ReflectionTestUtils.setField(classUnderTest, "field", "value")
或
Yaml yaml = new Yaml();
InputStream inputStream =this.getClass().getClassLoader().getResourceAsStream("application.yml");
yaml.load(inputStream);
或
Properties properties = new Properties();
properties.load(new FileReader("/application.properties"));
或
System.setProperty("orders.batch-size", "2");
或:
public static Properties fetchProperties() {
Properties properties = new Properties();
try {
File file = ResourceUtils.getFile("classpath:application.yml");
InputStream in = new FileInputStream(file);
properties.load(in);
} catch (IOException e) {
// exception logic
}
return properties;
}
或来自
如果您能提供有关如何解决此问题的建议,我将不胜感激。干杯!
首先,类型应该是整数。
@Value("${orders.batch-size}")
private Integer ordersBatchSize;
然后使用反射实用程序是一种很常见的方法。请注意字段名称必须匹配。
ReflectionTestUtils.setField(classUnderTest, "ordersBatchSize", 100)
更好的方法是在用 @BeforeEach
注释的方法中使用 setter(如果可用)。
@BeforeEach
public void beforeEach() {
classUnderTest.setOrdersBatchSize(100);
}
最后,最好的方法是在test/resources
文件夹中定义application.yml
,Spring Boot优先进行测试:
orders.batch-size=100