ReflectionTestUtils를 사용해 private 변수나 메소드(함수)를 테스트하는 방법을 알아보자
환경
- Java
- Spring
ReflectionTestUtils
대상 Class
@Component
@Getter
public class ReflectionTestUtilsComponent {
private int privateValue;
private int privateMethod(int a, int b) {
privateValue += a;
privateValue += b;
return privateValue;
}
}
private 변수 테스트
형태
static void setField(Class<?> targetClass, String name, Object value)
static void setField(Class<?> targetClass, String name, Object value, Class<?> type)
static void setField(Object targetObject, Class<?> targetClass, String name, Object value, Class<?> type)
static void setField(Object targetObject, String name, Object value)
static void setField(Object targetObject, String name, Object value, Class<?> type)
사용 예시
@Test
public void testPrivateValue() {
ReflectionTestUtils.setField(reflectionTestUtilsComponent, "privateValue", 100);
// ReflectionTestUtils.setField(대상 객체, "변수명", 원하는 값);
Assertions.assertEquals(100, reflectionTestUtilsComponent.getPrivateValue());
}
private 메소드(함수) 테스트
형태
static <T> T invokeMethod(Class<?> targetClass, String name, Object... args)
static <T> T invokeMethod(Object targetObject, Class<?> targetClass, String name, Object... args)
static <T> T invokeMethod(Object target, String name, Object... args)
사용 예시
@Test
public void testPrivateMethod() {
ReflectionTestUtils.setField(reflectionTestUtilsComponent, "privateValue", 100);
// ReflectionTestUtils.setField(대상 객체, "변수명", 원하는 값);
Assertions.assertEquals(103, (Integer) ReflectionTestUtils.invokeMethod(reflectionTestUtilsComponent, "privateMethod", 1, 2));
// ReflectionTestUtils.invokeMethod(대상 객체, "메소드(함수)명", 인자);
Assertions.assertEquals(103, reflectionTestUtilsComponent.getPrivateValue());
}