public abstract class ReflectionTestUtils
extends java.lang.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:
private
or protected
field access as opposed to
public
setter methods for properties in a domain entity.@Autowired
,
@Inject
, and
@Resource
which provides dependency
injection for private
or protected
fields, setter methods,
and configuration methods.@PostConstruct
and @PreDestroy
for lifecycle callback
methods.In addition, several methods in this class provide support for static
fields — for example, setField(Class, String, Object)
,
getField(Class, String)
, etc.
ReflectionUtils
,
AopTestUtils
Constructor and Description |
---|
ReflectionTestUtils() |
Modifier and Type | Method and Description |
---|---|
static java.lang.Object |
getField(java.lang.Class<?> targetClass,
java.lang.String name)
Get the value of the static field with the given
name from the provided targetClass . |
static java.lang.Object |
getField(java.lang.Object targetObject,
java.lang.Class<?> targetClass,
java.lang.String name)
Get the value of the field with the given
name
from the provided targetObject /targetClass . |
static java.lang.Object |
getField(java.lang.Object targetObject,
java.lang.String name)
Get the value of the field with the given
name
from the provided targetObject . |
static java.lang.Object |
invokeGetterMethod(java.lang.Object target,
java.lang.String name)
Invoke the getter method with the given
name on the supplied
target object with the supplied value . |
static <T> T |
invokeMethod(java.lang.Object target,
java.lang.String name,
java.lang.Object... args)
Invoke the method with the given
name on the supplied target
object with the supplied arguments. |
static void |
invokeSetterMethod(java.lang.Object target,
java.lang.String name,
java.lang.Object value)
Invoke the setter method with the given
name on the supplied
target object with the supplied value . |
static void |
invokeSetterMethod(java.lang.Object target,
java.lang.String name,
java.lang.Object value,
java.lang.Class<?> type)
Invoke the setter method with the given
name on the supplied
target object with the supplied value . |
static void |
setField(java.lang.Class<?> targetClass,
java.lang.String name,
java.lang.Object value)
Set the static field with the given
name on
the provided targetClass to the supplied value . |
static void |
setField(java.lang.Class<?> targetClass,
java.lang.String name,
java.lang.Object value,
java.lang.Class<?> type)
Set the static field with the given
name /type on the provided targetClass to
the supplied value . |
static void |
setField(java.lang.Object targetObject,
java.lang.Class<?> targetClass,
java.lang.String name,
java.lang.Object value,
java.lang.Class<?> type)
Set the field with the given
name /type
on the provided targetObject /targetClass to the supplied
value . |
static void |
setField(java.lang.Object targetObject,
java.lang.String name,
java.lang.Object value)
Set the field with the given
name on the
provided targetObject to the supplied value . |
static void |
setField(java.lang.Object targetObject,
java.lang.String name,
java.lang.Object value,
java.lang.Class<?> type)
Set the field with the given
name /type
on the provided targetObject to the supplied value . |
public static void setField(java.lang.Object targetObject, java.lang.String name, @Nullable java.lang.Object value)
name
on the
provided targetObject
to the supplied value
.
This method delegates to setField(Object, String, Object, Class)
,
supplying null
for the type
argument.
targetObject
- the target object on which to set the field; never null
name
- the name of the field to set; never null
value
- the value to setpublic static void setField(java.lang.Object targetObject, @Nullable java.lang.String name, @Nullable java.lang.Object value, @Nullable java.lang.Class<?> type)
name
/type
on the provided targetObject
to the supplied value
.
This method delegates to setField(Object, Class, String, Object, Class)
,
supplying null
for the targetClass
argument.
targetObject
- the target object on which to set the field; never null
name
- the name of the field to set; may be null
if
type
is specifiedvalue
- the value to settype
- the type of the field to set; may be null
if
name
is specifiedpublic static void setField(java.lang.Class<?> targetClass, java.lang.String name, @Nullable java.lang.Object value)
name
on
the provided targetClass
to the supplied value
.
This method delegates to setField(Object, Class, String, Object, Class)
,
supplying null
for the targetObject
and type
arguments.
targetClass
- the target class on which to set the static field;
never null
name
- the name of the field to set; never null
value
- the value to setpublic static void setField(java.lang.Class<?> targetClass, @Nullable java.lang.String name, @Nullable java.lang.Object value, @Nullable java.lang.Class<?> type)
name
/type
on the provided targetClass
to
the supplied value
.
This method delegates to setField(Object, Class, String, Object, Class)
,
supplying null
for the targetObject
argument.
targetClass
- the target class on which to set the static field;
never null
name
- the name of the field to set; may be null
if
type
is specifiedvalue
- the value to settype
- the type of the field to set; may be null
if
name
is specifiedpublic static void setField(@Nullable java.lang.Object targetObject, @Nullable java.lang.Class<?> targetClass, @Nullable java.lang.String name, @Nullable java.lang.Object value, @Nullable java.lang.Class<?> type)
name
/type
on the provided targetObject
/targetClass
to the supplied
value
.
If the supplied targetObject
is a proxy, it will
be unwrapped allowing
the field to be set on the ultimate target of the proxy.
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.
targetObject
- the target object on which to set the field; may be
null
if the field is statictargetClass
- the target class on which to set the field; may
be null
if the field is an instance fieldname
- the name of the field to set; may be null
if
type
is specifiedvalue
- the value to settype
- the type of the field to set; may be null
if
name
is specifiedReflectionUtils.findField(Class, String, Class)
,
ReflectionUtils.makeAccessible(Field)
,
ReflectionUtils.setField(Field, Object, Object)
,
AopTestUtils.getUltimateTargetObject(Object)
@Nullable public static java.lang.Object getField(java.lang.Object targetObject, java.lang.String name)
name
from the provided targetObject
.
This method delegates to getField(Object, Class, String)
,
supplying null
for the targetClass
argument.
targetObject
- the target object from which to get the field;
never null
name
- the name of the field to get; never null
getField(Class, String)
@Nullable public static java.lang.Object getField(java.lang.Class<?> targetClass, java.lang.String name)
name
from the provided targetClass
.
This method delegates to getField(Object, Class, String)
,
supplying null
for the targetObject
argument.
targetClass
- the target class from which to get the static field;
never null
name
- the name of the field to get; never null
getField(Object, String)
@Nullable public static java.lang.Object getField(@Nullable java.lang.Object targetObject, @Nullable java.lang.Class<?> targetClass, java.lang.String name)
name
from the provided targetObject
/targetClass
.
If the supplied targetObject
is a proxy, it will
be unwrapped allowing
the field to be retrieved from the ultimate target of the proxy.
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.
targetObject
- the target object from which to get the field; may be
null
if the field is statictargetClass
- the target class from which to get the field; may
be null
if the field is an instance fieldname
- the name of the field to get; never null
getField(Object, String)
,
getField(Class, String)
,
ReflectionUtils.findField(Class, String, Class)
,
ReflectionUtils.makeAccessible(Field)
,
ReflectionUtils.getField(Field, Object)
,
AopTestUtils.getUltimateTargetObject(Object)
public static void invokeSetterMethod(java.lang.Object target, java.lang.String name, java.lang.Object value)
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.
target
- the target object on which to invoke the specified setter
methodname
- the name of the setter method to invoke or the corresponding
property namevalue
- the value to provide to the setter methodReflectionUtils.findMethod(Class, String, Class[])
,
ReflectionUtils.makeAccessible(Method)
,
ReflectionUtils.invokeMethod(Method, Object, Object[])
public static void invokeSetterMethod(java.lang.Object target, java.lang.String name, @Nullable java.lang.Object value, @Nullable java.lang.Class<?> type)
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.
target
- the target object on which to invoke the specified setter
methodname
- the name of the setter method to invoke or the corresponding
property namevalue
- the value to provide to the setter methodtype
- the formal parameter type declared by the setter methodReflectionUtils.findMethod(Class, String, Class[])
,
ReflectionUtils.makeAccessible(Method)
,
ReflectionUtils.invokeMethod(Method, Object, Object[])
@Nullable public static java.lang.Object invokeGetterMethod(java.lang.Object target, java.lang.String name)
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.
target
- the target object on which to invoke the specified getter
methodname
- the name of the getter method to invoke or the corresponding
property nameReflectionUtils.findMethod(Class, String, Class[])
,
ReflectionUtils.makeAccessible(Method)
,
ReflectionUtils.invokeMethod(Method, Object, Object[])
@Nullable public static <T> T invokeMethod(java.lang.Object target, java.lang.String name, java.lang.Object... args)
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.
target
- the target object on which to invoke the specified methodname
- the name of the method to invokeargs
- the arguments to provide to the methodMethodInvoker
,
ReflectionUtils.makeAccessible(Method)
,
ReflectionUtils.invokeMethod(Method, Object, Object[])
,
ReflectionUtils.handleReflectionException(Exception)