ReflectionTestUtils (Spring Framework 3.2.1.RELEASE API)
Date: 2013-01-24

org.springframework.test.util

## Class ReflectionTestUtils

- java.lang.Object
- - org.springframework.test.util.ReflectionTestUtils

-     public class ReflectionTestUtils
      extends Object

  `ReflectionTestUtils` is a collection of reflection-based utility methods for use in unit and integration testing scenarios.

  There are often times when it would be beneficial to be able to set a non-`public` field, invoke a non-`public` setter method, or invoke a non-`public` configuration or lifecycle callback method when testing code involving, for example:

  - ORM frameworks such as JPA and Hibernate which condone the usage of `private` or `protected` field access as opposed to `public` setter methods for properties in a domain entity.
  - Spring's support for annotations such as `@Autowired` and `@Resource` which provides dependency injection for `private` or `protected` fields, setter methods, and configuration methods.
  - Use of annotations such as `@PostConstruct` and `@PreDestroy` for lifecycle callback methods.
  Since:
    2.5
  Author:
    Sam Brannen, Juergen Hoeller
  See Also:
    `ReflectionUtils`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ReflectionTestUtils()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static Object` | `getField(Object target, String name)` Get the field with the given `name` from the provided target object.
    `static Object` | `invokeGetterMethod(Object target, String name)` Invoke the getter method with the given `name` on the supplied target object with the supplied `value`.
    `static <T> T` | `invokeMethod(Object target, String name, Object... args)` Invoke the method with the given `name` on the supplied target object with the supplied arguments.
    `static void` | `invokeSetterMethod(Object target, String name, Object value)` Invoke the setter method with the given `name` on the supplied target object with the supplied `value`.
    `static void` | `invokeSetterMethod(Object target, String name, Object value, Class<?> type)` Invoke the setter method with the given `name` on the supplied target object with the supplied `value`.
    `static void` | `setField(Object target, String name, Object value)` Set the `field` with the given `name` on the provided `target object` to the supplied `value`.
    `static void` | `setField(Object target, String name, Object value, Class<?> type)` Set the `field` with the given `name` on the provided `target object` to the supplied `value`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ReflectionTestUtils

          public ReflectionTestUtils()

  - ### Method Detail

    - #### setField

          public static void setField(Object target,
                      String name,
                      Object value)

      Set the `field` with the given `name` on the provided `target object` to the supplied `value`.

      This method traverses the class hierarchy in search of the desired field. In addition, an attempt will be made to make non-`public` fields accessible, thus allowing one to set `protected`, `private`, and package-private fields.

      Parameters:
        `target` - the target object on which to set the field
        `name` - the name of the field to set
        `value` - the value to set
      See Also:
        `ReflectionUtils.findField(Class, String, Class)`, `ReflectionUtils.makeAccessible(Field)`, `ReflectionUtils.setField(Field, Object, Object)`

    - #### setField

          public static void setField(Object target,
                      String name,
                      Object value,
                      Class<?> type)

      Set the `field` with the given `name` on the provided `target object` to the supplied `value`.

      This method traverses the class hierarchy in search of the desired field. In addition, an attempt will be made to make non-`public` fields accessible, thus allowing one to set `protected`, `private`, and package-private fields.

      Parameters:
        `target` - the target object on which to set the field
        `name` - the name of the field to set
        `value` - the value to set
        `type` - the type of the field (may be `null`)
      See Also:
        `ReflectionUtils.findField(Class, String, Class)`, `ReflectionUtils.makeAccessible(Field)`, `ReflectionUtils.setField(Field, Object, Object)`

    - #### getField

          public static Object getField(Object target,
                        String name)

      Get the field with the given `name` from the provided target object.

      This method traverses the class hierarchy in search of the desired field. In addition, an attempt will be made to make non-`public` fields accessible, thus allowing one to get `protected`, `private`, and package-private fields.

      Parameters:
        `target` - the target object on which to set the field
        `name` - the name of the field to get
      Returns:
        the field's current value
      See Also:
        `ReflectionUtils.findField(Class, String, Class)`, `ReflectionUtils.makeAccessible(Field)`, `ReflectionUtils.setField(Field, Object, Object)`

    - #### invokeSetterMethod

          public static void invokeSetterMethod(Object target,
                                String name,
                                Object value)

      Invoke the setter method with the given `name` on the supplied target object with the supplied `value`.

      This method traverses the class hierarchy in search of the desired method. In addition, an attempt will be made to make non-`public` methods accessible, thus allowing one to invoke `protected`, `private`, and package-private setter methods.

      In addition, this method supports JavaBean-style property names. For example, if you wish to set the `name` property on the target object, you may pass either "name" or "setName" as the method name.

      Parameters:
        `target` - the target object on which to invoke the specified setter method
        `name` - the name of the setter method to invoke or the corresponding property name
        `value` - the value to provide to the setter method
      See Also:
        `ReflectionUtils.findMethod(Class, String, Class[])`, `ReflectionUtils.makeAccessible(Method)`, `ReflectionUtils.invokeMethod(Method, Object, Object[])`

    - #### invokeSetterMethod

          public static void invokeSetterMethod(Object target,
                                String name,
                                Object value,
                                Class<?> type)

      Invoke the setter method with the given `name` on the supplied target object with the supplied `value`.

      This method traverses the class hierarchy in search of the desired method. In addition, an attempt will be made to make non-`public` methods accessible, thus allowing one to invoke `protected`, `private`, and package-private setter methods.

      In addition, this method supports JavaBean-style property names. For example, if you wish to set the `name` property on the target object, you may pass either "name" or "setName" as the method name.

      Parameters:
        `target` - the target object on which to invoke the specified setter method
        `name` - the name of the setter method to invoke or the corresponding property name
        `value` - the value to provide to the setter method
        `type` - the formal parameter type declared by the setter method
      See Also:
        `ReflectionUtils.findMethod(Class, String, Class[])`, `ReflectionUtils.makeAccessible(Method)`, `ReflectionUtils.invokeMethod(Method, Object, Object[])`

    - #### invokeGetterMethod

          public static Object invokeGetterMethod(Object target,
                                  String name)

      Invoke the getter method with the given `name` on the supplied target object with the supplied `value`.

      This method traverses the class hierarchy in search of the desired method. In addition, an attempt will be made to make non-`public` methods accessible, thus allowing one to invoke `protected`, `private`, and package-private getter methods.

      In addition, this method supports JavaBean-style property names. For example, if you wish to get the `name` property on the target object, you may pass either "name" or "getName" as the method name.

      Parameters:
        `target` - the target object on which to invoke the specified getter method
        `name` - the name of the getter method to invoke or the corresponding property name
      Returns:
        the value returned from the invocation
      See Also:
        `ReflectionUtils.findMethod(Class, String, Class[])`, `ReflectionUtils.makeAccessible(Method)`, `ReflectionUtils.invokeMethod(Method, Object, Object[])`

    - #### invokeMethod

          public static <T> T invokeMethod(Object target,
                           String name,
                           Object... args)

      Invoke the method with the given `name` on the supplied target object with the supplied arguments.

      This method traverses the class hierarchy in search of the desired method. In addition, an attempt will be made to make non-`public` methods accessible, thus allowing one to invoke `protected`, `private`, and package-private methods.

      Parameters:
        `target` - the target object on which to invoke the specified method
        `name` - the name of the method to invoke
        `args` - the arguments to provide to the method
      Returns:
        the invocation result, if any
      See Also:
        `MethodInvoker`, `ReflectionUtils.makeAccessible(Method)`, `ReflectionUtils.invokeMethod(Method, Object, Object[])`, `ReflectionUtils.handleReflectionException(Exception)`