我在模拟redis模板中遇到了一个问题。有人能帮我写下面类的单元测试吗?
@Repository
public class CasheRepo {
@Autowired
private RedisTemplate<String, Object> template;
public Object getObject(final String key) {
return template.opsForValue().get(key);
}
}
下面是单元测试类。但它不工作。它显示空点异常
@RunWith(MockitoJUnitRunner.class)
public class CashRepoTest {
@InjectMocks
private CasheRepo casheRepo = new CasheRepo();
private @Mock RedisConnection redisConnectionMock;
private @Mock RedisConnectionFactory redisConnectionFactoryMock;
private RedisTemplate redisTemplate;
@Before
public void setUp() { Mockito.when(redisConnectionFactoryMock.getConnection()).thenReturn(redisConnectionMock);
redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactoryMock);
redisTemplate.afterPropertiesSet();
}
@Test
public void getObjectTest() {
Mockito.doNothing().when(redisTemplate).opsForValue().set("spring", "data");
redisTemplate.afterPropertiesSet();
System.out.println(redisTemplate.opsForValue().get("spring"));
}
}
7条答案
按热度按时间42fyovps1#
你可以这样模仿redisTemplate:
tyky79it2#
您正在通过构造函数创建redisTemplate,但它不是由DI获取的。请尝试使用@Spy注解:
它将允许DI注入您的RedisTemplate示例。
w41d8nur3#
对于那些想对
HashOperations
和put()
做同样事情的人希望对你有帮助;)
3pmvbmvn4#
当我面临类似的任务时,我已经基于mock-jedis做了一个工具(注解)来解决它。你可以在这里读到它:https://github.com/incu6us/redis-mock-template或仅将依赖项添加到项目:
tzxcd3kk5#
我尝试了各种jedis mock库,这是唯一一个与池资源一起工作的。其他库,服务器甚至没有启动,一些需要本地redis才能启动和运行。这是junit的最佳选择。
https://github.com/50onRed/mock-jedis
t9eec4r06#
就连我也面临着类似的问题。
我修理它的步骤-
1.在我的测试类中添加了@ExtendWith(SpringExtension.class)注解。
1.使用@MockBean注解RedisTemplate
1.在我的测试方法中,我使用了ReflectionTestUtils来设置redisTemplate字段。
envsm3lx7#
到达这里有点晚了。我的回答如下与Junit5