2014-06-27 22 views
5

Denetleyicimde aşağıdaki gibi bir kod var. RedisTemplate stringRedisTemplate benim denetleyicisi TestindeDenetleyici Birimi Sınaması RedisTemplate opsForValue ile nasıl dönebilirim? ValueOperations

def accessRedis() 
{ 
    val = stringRedisTemplate.opsForValue().get('Key') 
} 

, ben niyet bir alay ValueOperations dönmek bir alay RedisTemplate enjekte etmek. Kodum: org.codehaus.groovy.runtime.typehandling.GroovyCastException: nesne'com.tnd[email protected]1aa55dd5 döküm olamaz Ancak

def template = mockFor(RedisTemplate)  
def val = mockFor(org.springframework.data.redis.core.ValueOperations) 
val.demand.get {p-> println "$p"} 
template.demand.opsForValue { 
    return val.createMock() 
} 

controller.stringRedisTemplate = template.createMock() 
controller.accessRedis() 

, aşağıdaki hata var 'class ile' com.tnd.viewport.ui.AppHawkControllerSpec $ _ $ spock_feature_0_1_closure2 'sınıfına' org.springframework.data.redis.core.ValueOperations '

Benim senaryo için bir çözüm önerebilir misiniz? Teşekkürler!

cevap

1
redisTemplate = mock(RedisTemplate.class); 
     Whitebox.setInternalState(loginService, "redisTemplate", redisTemplate); 

List<Object> list = new ArrayList<Object>(); 
     list.add(15l); 
     List<Object> keys = new ArrayList<>(); 
     keys.addAll(Arrays.asList("15")); 

HashOperations<Serializable, Object, Object> hashOperations =mock(HashOperations.class); 

when(redisTemplate.opsForHash()).thenReturn(hashOperations); 
     when(hashOperations.multiGet(anyString(), anyListOf(Object.class))).thenReturn(list); 
+4

Cevabınız daha iyi anlaşılabilir hale getirmek için bir açıklama ekleyin. –

İlgili konular