spring-boot - 如何在springboot中将@Value属性从application.properties注入@InjectMocks?
问题描述
批处理服务.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
}
}
}
批处理服务测试.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
应用程序属性
priority.mapping = {'first':'1','second':'2','third':'3'}
有没有办法将属性文件中的哈希映射注入 BatchService?当我使用ReflectionTestUtils.setField(BatchService.class, "priorMap", priorMap);时它会抛出错误
解决方案
不要使用 BatchService.class,使用您正在测试的实例:
@BeforeEach
public void init() throws Exception {
ReflectionTestUtils.setField(batchService, "priorMap", "value you want to inject");
}
推荐阅读
- haskell - 如何在字符串haskell中实现占位符
- python - 表单未在 django 中显示
- javascript - SetInterval 在 Kindle 和 Kobo 浏览器中不起作用
- ruby-on-rails - 如何在graphql ruby中获取连接类型的字段参数
- c - 如何将新设备添加到板初始化代码 linux 内核
- google-cloud-platform - 从 Google Storage 公共 URL 中删除“X-Content-Type-Options: nosniff”标头
- python - 如何为 SARIMA 设置订单和季节性参数
- rust - 参数位置中的 dyn Trait 是什么意思?
- android - 是否可以在 Firestore 中将 POJO 对象转换为 DocumentSnapshot?
- c# - 仅在 ISE 中运行的 Powershell 脚本