2015-05-05 23 views
0

這裏是方法我試圖單元測試:我應該如何模擬此方法調用?

public void setToCache(final String cacheKey, final String value) { 
    if (StringUtils.isEmpty(cacheKey)) { 
     throw new NamedSystemException(
       ENamedSystemExceptionCode.ILLEGAL_ARGUMENT_EXCEPTION, 
       "Cache Key is null or empty."); 

    } else if (StringUtils.isEmpty(value)) { 
     throw new NamedSystemException(
       ENamedSystemExceptionCode.ILLEGAL_ARGUMENT_EXCEPTION, 
       "Value is null or empty."); 
    } 

    final Jedis jedis = getJedisClient(); 

    try { 
     jedis.set(cacheKey, value); 
     jedis.expire(cacheKey, 60); 

    } finally { 
     jedis.close(); 
    } 
} 

我怎麼能嘲笑Jedis對象?

+1

基本上,你不能。你可以想象窺探對象並模擬getJedisClient(),但由於它是一種靜態方法,所以Mockito不能做任何事情。爲了使代碼可測試,避免使用靜態方法,並使用依賴注入來注入依賴關係,而不是查看它們。 –

+0

@JBNizet我已將其更改爲實例方法。是否應該從實例中檢索jedis以及是否可以嘲弄? –

+0

是的。 Mockito不能模擬靜態方法。 –

回答

0

你能描述一下你的getJedisClient()方法嗎?

如果這種方法被使用在類注射(的Jedis無論是直接的實例或proding Jedis服務)的對象,你可以使用

Mockito.mock(yourObject); 

這真的取決於你的getJedisClient()輕鬆地嘲笑它實現。

相關問題