728x90
※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다.
테스트용 코드 준비
public Sample {
public int add(int x, int y) {
return (x + y);
}
protected int minus(int x, int y) {
return (x - y);
}
private int multiplication(int x, int y) {
return (x * y);
}
}
public 메소드의 테스트 코드
import org.junit.Test;
public class SampleTest {
@Test
public void testEqual() {
Sample sample = new Sample();
int expected = 10;
int actual = sample.add(8, 2);
assertEquals(expected, actual);
}
}
단순히 덧셈하는 테스트이다. 성공하는 예 뿐이지만, 보통의 테스트 코드이다.
protected, private 메소드 테스트
인스턴스부터 protedc, private 메소드를 그대로 사용할 수 없으므로, 리플렉션이라고 불리는 방법을 사용하여 테스트 케이스를 작성한다.
방법은 다음과 같다.
Sample sample = new Sample();
Method method = Sample.class.getDeclaredMethod("<메소드명>", 인수의 데이터형1, 인수의 데이터형2...);
method.setAccessible(true);
int actual = (반환값의 데이터형)method.invoke(<인스턴스>,인수1,인수2...);
어떤 클래스에서도 존재하는 class 변수를 사용하며 getDeclareMethod() 메소드로 메소드를 획득한다. 획득한 메소드의 setAccessible(true)로 한다. 이것은 외부에서 액세스하는 것을 허가하기 위한 설정이다.그 후에는 method.invoke() 메소드로 메소드를 실행시킨다.
실제로 테스트 케이스를 작성해보자.
import static org.junit.Assert.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class SampleTest {
@Test
public void testMinus()
throws NoSuchMethodException,
SecurityException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
{
Sample sample = new Sample();
int expected = 6;
Method method = Sample.class.getDeclaredMethod("minus", int.class, int.class);
method.setAccessible(true);
int actual = (int)method.invoke(sample, 8, 2);
assertEquals(expected, actual);
}
@Test
public void testMultiplication()
throws NoSuchMethodException,
SecurityException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
{
Sample sample = new Sample();
int expected = 16;
Method method = Sample.class.getDeclaredMethod("multiplication", int.class, int.class);
method.setAccessible(true);
int actual = (int)method.invoke(sample, 8, 2);
assertEquals(expected, actual);
}
참고자료
728x90
'IT > 언어' 카테고리의 다른 글
[JavaScript] Blob의 사용법 (0) | 2023.07.21 |
---|---|
[Junit] static 메소드의 Mock화 (0) | 2023.07.11 |
[Java] String.format 사용법 (0) | 2023.05.30 |
[Java] 자주 사용되는 Lombok 어노테이션 (0) | 2023.05.15 |
[Java] 생성자(Constructor)의 기본과 사용법 (2) | 2023.05.13 |