lah*_*umw 6 java unit-testing mockito redis spring-data-redis
我在模拟Redis模板中遇到问题。谁能帮我为下课写单元测试。
@Repository
public class CasheRepo {
@Autowired
private RedisTemplate<String, Object> template;
public Object getObject(final String key) {
return template.opsForValue().get(key);
}
}
Run Code Online (Sandbox Code Playgroud)
下面是单元测试课程。但这不起作用。它显示空点异常
@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"));
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
你可以像这样模拟 redisTemplate:
@Mock
RedisTemplate<String, String> redisTemplate;
@Mock
private ValueOperations valueOperations;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
Mockito.when(redisTemplate.opsForValue()).thenReturn(valueOperations);
Mockito.doNothing().when(valueOperations).set(anyString(), anyString());
}
Run Code Online (Sandbox Code Playgroud)
小智 3
您正在通过构造函数创建 redisTemplate,但它不是通过 DI 获取的。尝试使用@Spy注释:
@Spy
private RedisTemplate redisTemplate = new RedisTemplate();
Run Code Online (Sandbox Code Playgroud)
它将允许 DI 注入您的 RedisTemplate 实例。
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |