gpt4 book ai didi

java - 如何在 Spring Boot 中将属性注入(inject)到测试类中?

转载 作者:行者123 更新时间:2023-11-30 05:27:10 25 4
gpt4 key购买 nike

如何将 application-test.properties 中的属性加载到 Spring Boot 中的测试类中?我做错了什么但无法弄清楚?

我可以从 application.properties 中获取下面给出的 Configuration 类的属性

package org.vinodh.testing;

import java.util.Map;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import lombok.Data;

@Configuration
@ConfigurationProperties(prefix = "caching")
@Data
public class CachingConfig {

@Value("${caching.name}")
private String name;

@Data
public static class CacheSpec {
private int minutesToExpire;
private int maximumSize;

}

private Map<String, CacheSpec> specs;

@Bean
public void test() {
System.out.println(name);
System.out.println(specs);
}

}

但是当我尝试在测试类中执行相同操作时,我得到 null,请参阅下面的代码。如何让我的测试类打印属性文件中的值?

package org.vinodh.testing;

import java.util.Map;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;

import lombok.Data;

@RunWith(SpringRunner.class)
@ContextConfiguration
@ConfigurationProperties(prefix = "caching")
@TestPropertySource("/application-test.properties")
@Data
public class CachingConfigTest {

@Value("${caching.name}")
private String name;

@Data
public static class CacheSpec {
private int minutesToExpire;
private int maximumSize;
}

private Map<String, CacheSpec> specs;

@Test
public void test() {
System.out.println(name);
System.out.println(specs);
}

}

应用程序属性

caching.specs.test.minutesToExpire=10
caching.specs.test.maximumSize=10
caching.name=Vinodh

应用程序测试.properties

caching.specs.test.minutesToExpire=10
caching.specs.test.maximumSize=10
caching.name=Vinodh

最佳答案

实际上你不需要在测试类中创建CacheSpec,这也是不推荐的,你可以使用源码包中的原始的。但只需将 getter 添加到 CachingConfig

中的私有(private)映射 specs 即可
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
@Profile("test")
public class CachingConfigTest {

@Autowired
private CachingConfig cachingConfig;

@Test
public void test() {
System.out.println(cachingConfig.getSpecs());
}

}

而且你也不需要@TestPropertySource,你可以只使用@Profile加载测试配置文件和@ActiveProfile来制作test 作为该测试类的 Activity 配置文件

关于java - 如何在 Spring Boot 中将属性注入(inject)到测试类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58309481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com