【问题标题】:How to inject @Value properties from application.properties to @InjectMocks in springboot?如何在spring boot中将@Value属性从application.properties注入@InjectMocks?
【发布时间】: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);

【问题讨论】:

    标签: spring-boot unit-testing junit mockito powermockito


    【解决方案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())
    猜你喜欢
    • 2018-09-07
    • 2019-03-18
    • 1970-01-01
    • 2017-06-17
    • 2021-05-17
    • 2019-02-10
    • 2016-12-27
    • 2017-07-12
    • 2022-01-26
    相关资源
    最近更新 更多