1 簡介 是`Spring spring core ReflectionTestUtils spring test ReflectionUtils ReflectionTestUtils`,能增加我們的便利性。 假設我們需要創建一個類,但它的某些成員變數是私有的,並且沒有提供公共的 方法,而我們無法 ...
1 簡介
ReflectionUtils
是Spring
中一個常用的類,屬於spring-core
包;ReflectionTestUtils
則屬於spring-test
包。兩者功能有重疊的地方,而ReflectionUtils
會更強大。在單元測試時使用ReflectionTestUtils
,能增加我們的便利性。
假設我們需要創建一個類,但它的某些成員變數是私有的,並且沒有提供公共的setter
方法,而我們無法按照它的正常初始化流程來使它的這些成員變數是我們想要的值。這時就需要想辦法修改一個類的私有變數,而反射
可以幫助到我們。Spring
也提供了反射
相關的工具類:ReflectionUtils
和ReflectionTestUtils
,這裡只介紹ReflectionTestUtils
的常用功能。
2 三類主要方法
獲取對象的成員變數:
public static Object getField(@Nullable Object targetObject, String name)
給對象註入成員變數:
public static void setField(Class<?> targetClass, String name, @Nullable Object value)
調用成員方法:
public static <T> T invokeMethod(Object target, String name, Object... args)
3 總結
ReflectionTestUtils
是一個小工具類,需要用到的時候,自然會感受到它的益處。