content: package com.alibaba.tamper;
  
  import java.lang.reflect.Field;
  import java.lang.reflect.Method;
  
  import org.springframework.util.ReflectionUtils;
  
  /**
   * 提供常见的测试方法
   * 
   * @author jianghang 2011-1-30 上午11:15:54
   */
  public class TestUtils {
  
      /**
       * 获取对应属性的值
       * 
       * @param obj
       * @param fieldName
       * @return
       */
      public static Object getField(Object obj, String fieldName) {
          Field field = ReflectionUtils.findField(obj.getClass(), fieldName);
          ReflectionUtils.makeAccessible(field);
          return ReflectionUtils.getField(field, obj);
      }
  
      /**
       * 设置对应参数的值
       * 
       * @param target
       * @param methodName
       * @param args
       * @return
       * @throws Exception
       */
      public static void setField(Object target, String fieldName, Object args) throws Exception {
          // 查找对应的方法
          Field field = ReflectionUtils.findField(target.getClass(), fieldName);
          ReflectionUtils.makeAccessible(field);
          ReflectionUtils.setField(field, target, args);
      }
  
      /**
       * 调用方法，可以是一些私有方法
       * 
       * @param target
       * @param methodName
       * @param args
       * @return
       * @throws Exception
       */
      public static Object invokeMethod(Object target, String methodName, Object... args) throws Exception {
          Method method = null;
          // 查找对应的方法
          if (args == null || args.length == 0) {
              method = ReflectionUtils.findMethod(target.getClass(), methodName);
          } else {
              Class[] argsClass = new Class[args.length];
              for (int i = 0; i < args.length; i++) {
                  argsClass[i] = args[i].getClass();
              }
              method = ReflectionUtils.findMethod(target.getClass(), methodName, argsClass);
          }
          ReflectionUtils.makeAccessible(method);
  
          if (args == null || args.length == 0) {
              return ReflectionUtils.invokeMethod(method, target);
          } else {
              return ReflectionUtils.invokeMethod(method, target, args);
          }
      }
  }
  