?????????????Mockito?
???????д??????????????????????????????????????????Щ????????????????????????????????????????????????????????????????????.??????????????????????????????????????????(???RPC????)??????д?????????????????????y??????????rpc?????mock??????????????????????????д????y???????????????????????????????????????Mockito????????????????????????mock???????mockito???????????????????.
????????mock????
?????????????????????Redis????????????????????????:
    publicclassRedisUtil{
????@Autowired
????privateRedisOperations<String??String>redisTemplate;
????publicbooleancheckKeyExists(Stringkey){
????returnredisTemplate.hasKey(key);
????}
????publicvoidsetValueByKey(Stringkey??Stringvalue){
????redisTemplate.opsForValue().set(key??value);
????}
????publicStringgetValueByKey(Stringkey){
????returnredisTemplate.opsForValue().get(key);
????}
????publicList<String>getMutiValuesByList(List<String>keys){
????returnredisTemplate.opsForValue().multiGet(keys);
????}
????publicvoiddeleteKey(Stringkey){
????redisTemplate.delete(key);
????}
????publicvoidincreValue(Stringkey??Longcount){
????redisTemplate.opsForValue().increment(key??count);
????}
????}
???????????????????????mock?????????????
????Mockito.mock(RedisUtil.class);
??????????????????????@mock???:
????@mock
????privateRedisUtilredisUtil;
????Tips:??????????????????Mockito????????????????package????????????????????????Mockito??:
????importstaticorg.mockito.Mockito.*;
????????????????????÷???
??????????????????????????г??????????????????????mock?????????Щ?????????????????????????????е??????????????б????????????????.
??????????RedisUtil???????????趨?????:
     when(redisUtil.getValueByKey("key1")).thenReturn("value1");
????when(redisUtil.getValueByKey("key2")).thenReturn("value2");
??????????趨???????????????:
????when(redisUtil.getValueByKey("key1")).thenThrow(newRuntimeException);
????????Mockito????????????????????:
????when(redisUtil.getValueByKey("key1")).thenReturn("value1").thenReturn("Value2");
????????????????ε???redis.getValueBykey("key1")?????value1??????α???????????value2.?????????????????????????????????????????value2???????????????????????return??Throw??????????????????????????????????????????????????????λ?????????????.
????Mockito???mock??????void?????
??????????????ж????????void?????????mock???????????Ч?????Mockito?????doNothing??????void????????????:
??doNothing().when(redisUtil).increValue(“key1"??1L);
   ??????????doNothing??mock?????????????????壬???????mock??????????????????????????????????????????????????????????????????????????????????????????????????????μ?????????????????????void???????????????????mock?????????doThrow()???void?????????????????????????mock????????????????????????????????????ú?verify()??£??????????????????????.????
????verify(redisUtil??times(1)).increValue("key1"??1L);
?????????е?times(1)?????Σ?????????increValue()???????????ε?????????????????????????????壬
????never():?????δ??????
????atleastOnce():???????????????
????atleast(3):????????????3??
????atMost(7):?????????7??
?????????????
??????????????????????????????????????????????????????????redisUtil?????????redisUtil.getValueByKey???????????????????key?????????????????????д:
????when(redisUtil.getValueByKey(anyString()).thenReturn("value1")
????????????????????У????????????????????÷?????????value1?????????????к??anyLong()??anyInt()??anyList()???
???????Spy????????????????
???????????????????mock????mock?????????????????????????????????????Spy?????????????????????????????????????????????????????????????????????????????????????????????spy?????????mock???????????????spy???????????????????????CLass????.?????????List?????
??  Listspy=spy(newLinkedList());
????when(spy.get(0)).thenReturn("value1");
????doReturn("value2").when(spy).get(0);
???????????д???????when(spy.get(0))?????????????????????????????????д???????????????????????????value2.??????????????????when????????????????????????????????doReturn()????????????????????????.
??????????????????t??????????spy.