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
`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)`