使用场景实例代码:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void save(User user){
......
userDao.insert(user);
}
......
}
解决方案:
public class UserServiceTest {
private UserService userService;
@Before
public void setUp() throws Exception {
userService = new UserServiceImpl();
UserDao userDao = mock(UserDao.class);
ReflectionUtils.setFieldValue(userService,"userDao",userDao);
}
@Test
public void testSave(){
userService.save(null);
}
工具类:
/**
* @description: 反射工具类
* @author zhu
*/
public class ReflectionUtils {
/**
* 设置属性值
* @param obj
* @param fieldName
* @param value
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public static void setFieldValue(Object obj, String fieldName, Object value) throws NoSuchFieldException, IllegalAccessException {
Class<?> clazz = obj.getClass();
Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(obj, value);
}
/**
* 访问私有方法
* @param obj
* @param funcName
* @param parameterTypes
* @param args
* @return
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
public static Object invoke(Object obj, String funcName, Class<?>[] parameterTypes, Object... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class<?> clazz = obj.getClass();
Method insideMethod = clazz.getDeclaredMethod(funcName, parameterTypes);
insideMethod.setAccessible(true);
Object value = insideMethod.invoke(obj, args);
return value;
}
}