java - 创建名为“redisKeyValueAdapter”的 bean 时出错:通过构造函数的 Bean 实例化失败
问题描述
我们在一个项目中使用了 Redis 缓存。我们已经实现了 Mockito,我们正在模拟存储库层,但 redisTemplate 被用于从服务层的缓存中获取数据,我们正在尝试模拟 RedisTemplate 但无法这样做
@MockBean
private RedisTemplate<Object, Object> redisTemplate;
@Test
public void testGetProductHappyPath() {
log.info(ApplicationConstantsTest.METHOD_ENTER_LABEL);
when(redisTemplate.keys(ArgumentMatchers.any())).thenReturn(null);
final RequestBuilder requestBuilder = MockMvcRequestBuilders.get(ApplicationConstantsTest.PRODUCT_WALLET_OF_PRODUCT, Integer.MAX_VALUE)
.accept(MediaType.APPLICATION_JSON);
try {
mockMvc.perform(requestBuilder).andExpect(status().isOk());
log.info(ApplicationConstantsTest.METHOD_EXIT_LABEL);
} catch (final Exception e) {
log.error(ApplicationConstantsTest.METHOD_EXCEPTION_LABEL, e);
}
}
但我们得到了这个:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.redis.core.RedisKeyValueAdapter]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: ConnectionFactory must not be null!
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:217)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:309)
... 65 common frames omitted
Caused by: java.lang.IllegalArgumentException: ConnectionFactory must not be null!
at org.springframework.util.Assert.notNull(Assert.java:201)
at org.springframework.data.redis.listener.RedisMessageListenerContainer.setConnectionFactory(RedisMessageListenerContainer.java:311)
at org.springframework.data.redis.core.RedisKeyValueAdapter.initMessageListenerContainer(RedisKeyValueAdapter.java:712)
at org.springframework.data.redis.core.RedisKeyValueAdapter.<init>(RedisKeyValueAdapter.java:196)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
解决方案
推荐阅读
- python - Snakemake 使用不同文件夹中的输入文件按名称汇总
- c# - 将指针数据复制到字节数组并写入 MemoryStream 会导致 LOH 中的大量分配
- python - 如何每月自动将网站上的大型 .xml 数据库文件替换为较新的文件?
- android - 如何在 android 的 TextInputLayout 中对齐文本?
- python - 如何在 tkinter 中制作现代按钮
- javascript - discord.js 尝试缓存公会时收到缺少访问错误
- python - PyPi 安装的应用程序因 ModuleNotFound 而失败
- java - IntelliJ 指示尽管使用 Java 14 增强型开关块不起作用
- powershell - Powershell函数从管道接收多个参数
- c++ - 如何使用 CUDA 库将非零值替换为特定整数?