如何在spring boot中将@Value属性从application.properties注入@InjectMocks?
Posted
技术标签:
【中文标题】如何在spring boot中将@Value属性从application.properties注入@InjectMocks?【英文标题】:How to inject @Value properties from application.properties to @InjectMocks in springboot? 【发布时间】:2021-11-24 04:13:15 【问题描述】:BatchService.java
@Service
public class BatchService
@Value("#$priority.mapping")
public Map<String, String> priorMap;
@Autowired
private Repo payload;
public boolean createAndAddBatches()
for (String priority: priorMap.keySet())
// code
BatchServiceTest.java
@RunWith(PowerMockRunner.class)
public class BatchServiceTest
@Value("#$priority.mapping")
private static Map<String, String> priorMap;
@Mock
private Repo repoMock;
@InjectMocks
private BatchService batchService;
@BeforeClass
@PrepareForTest(LogManager.class)
public static void setup()
ReflectionTestUtils.setField(BatchService.class, "priorMap", priorMap);
错误
java.lang.IllegalAccessError: class javax.xml.parsers.FactoryFinder (in unnamed module @0xc3cdf38) cannot access class jdk.xml.internal.SecuritySupport (in module java.xml) because module java.xml does not export jdk.xml.internal to unnamed module @0xc3cdf38
application.properties
priority.mapping = 'first':'1','second':'2','third':'3'
有没有办法将属性文件中的 hashmap 注入 BatchService?当我使用 ReflectionTestUtils.setField(BatchService.class, "priorMap", priorMap);
【问题讨论】:
【参考方案1】:不要使用 BatchService.class,使用你正在测试的实例:
@BeforeEach
public void init() throws Exception
ReflectionTestUtils.setField(batchService, "priorMap", "value you want to inject");
【讨论】:
感谢您的回复。试过,但它在这一行出现错误 java.lang.NullPointerExceptionfor (String priority: priorMap.keySet())
以上是关于如何在spring boot中将@Value属性从application.properties注入@InjectMocks?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Wildfly 中将外部属性文件加载到 Spring Boot
如何在 Spring Boot 中将 Resilience4j 断路器与 WebFlux 一起使用
如何在Spring Boot Rest API中的BeanUtils.copyProperties中将String转换为枚举