### Question:
ReflectionUtils extends org.springframework.util.ReflectionUtils { public static Object getFieldValue(final Object obj, final String fieldName) { if (obj == null || StringUtil.isEmpty(fieldName)) { return null; } int index = fieldName.indexOf("."); if (index < 0) { Field field = getAccessibleField(obj, fieldName); if (field == null) { throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]"); } Object result = null; try { result = field.get(obj); } catch (IllegalAccessException e) { log.error("不可能抛出的异常{}", e); } return result; } else { return getFieldValue(getFieldValue(obj, fieldName.substring(0, index)), fieldName.substring(index + 1)); } }  static Object invokeGetterMethod(Object obj, String propertyName); static void invokeSetterMethod(Object obj, String propertyName, Object value); static void invokeSetterMethod(Object obj, String propertyName, Object value, Class<?> propertyType); static Object getFieldValue(final Object obj, final String fieldName); static void setFieldValue(final Object obj, final String fieldName, final Object value); static Field getAccessibleField(final Object obj, final String fieldName); static Object invokeMethod(final Object obj, final String methodName, final Class<?>[] parameterTypes, final Object[] args); static Method getAccessibleMethod(final Object obj, final String methodName, final Class<?>... parameterTypes); @SuppressWarnings("unchecked") static Class<T> getSuperClassGenricType(final Class<?> clazz); static Class<?> getSuperClassGenricType(final Class<?> clazz, final int index); static List<?> convertElementPropertyToList(final Collection<?> collection, final String propertyName); static String convertElementPropertyToString(final Collection<?> collection, final String propertyName, final String separator); static RuntimeException convertReflectionExceptionToUnchecked(Exception e);  }### Answer:
@Test public void testGetFieldValue() { }