先上service層方法代碼redis
/** * 經過勳章code獲取勳章對應的積分 * @param medalCode 勳章code * @return 勳章對應的積分 */ private int getMedalIntegralByMedalCode(String autoshowCode, String medalCode){ String integral = redisClient.hget(CacheConstants.MEDAL_HASHMAP+autoshowCode, medalCode); if(StringUtils.isEmpty(integral)){ List<AsMedal> medalList = asUserIntegralMapper.selectByAutoshowCode(autoshowCode); for(AsMedal medal:medalList){ redisClient.hset(CacheConstants.MEDAL_HASHMAP+autoshowCode,medal.getMedalCode(),String.valueOf(medal.getIntegral())); } integral = redisClient.hget(CacheConstants.MEDAL_HASHMAP+autoshowCode, medalCode); } return integral == null?0:Integer.valueOf(integral); }
測試類須要的依賴先注入到測試類中app
@Tested private IntegralServiceImpl targetObject; @Injectable private RedisClient redisClient;
測試方法以下測試
@Test public void getMedalIntegralByMedalCodeTest() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { new NonStrictExpectations(){ { redisClient.hget("MEDAL_HASHMAPfrankfurt", "1002"); result = "75"; } }; //經過反射調用私有的方法 Method method = targetObject.getClass().getDeclaredMethod("getMedalIntegralByMedalCode", String.class, String.class); method.setAccessible(true); Integer integral = (Integer) method.invoke(targetObject, "frankfurt", "1002"); Assert.assertEquals(75*1L, integral*1L); }