如何在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.NullPointerException for (String priority: priorMap.keySet())

以上是关于如何在spring boot中将@Value属性从application.properties注入@InjectMocks?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中将属性注入测试类?

如何在 Wildfly 中将外部属性文件加载到 Spring Boot

如何在 Spring Boot 中将 Resilience4j 断路器与 WebFlux 一起使用

如何在Spring Boot Rest API中的BeanUtils.copyProperties中将String转换为枚举

如何在 Spring Boot 中加载和遍历属性文件

spring boot 项目属性配置