바로 제가 테스트할 메소드가 JUNIT 테스트 케이스 안에 들어있는 것이었습니다.
상황이 뭐냐하면
다른 누군가가 해당 메소드가 privat으로 되어 있었기 때문에 JUNIT에서 불러 올 수 없었던 것이지요. 그래서 똑같은 메소드를 만들어서 테스트를 했던 것입니다.
문제는 이 테스트가 나중에 쓸모 없어진다는 것같아요.
테스트를 나중에 돌려도 잘된다고 나오겠죠. 버그가 있어도
그러면 JUNIT은 어떻게 테스트를 해야 하는거지?
간접적인 테스트를 하는 것이 방법일 것 같아요. private메소드를 사용하는 public 메소드는 최소한 하나는 있을 것이니 그것을 이용해서 테스트를 하는 것입니다.
하지만 그것으로 부족하다고 느끼시다면?
방법이 있습니다. 리플렉션을 사용하는 방법이죠.
코드를 보겠습니다.
import java.util.List; public class A { private String name; public A (String name) { this.name = name; } private String dosthPrivate(int a, String b, List현재 위에 있는 dosthPrivate은 실행할 방법이 없습니다.list) { return "name: " + this.name + ", a: " + a + ", b: " + b + ", List : " + list; } }
JUnit으로 테스트를 하려면 어떻게 해야 할까요??
이제 테스트 코드를 보도록 합니다.
public class ATest { A a = new A("TEST"); @Test public void test() throws Exception{ Method method = A.class.getDeclaredMethod("dosthPrivate", int.class, String.class, List.class); method.setAccessible(true); String result = String.class.cast(method.invoke (a, 1, "BBB", new ArrayList아주 간단하죠?(Arrays.asList(1,2,3,5,8,13,21)))); assertThat(result, CoreMatchers.is ("name: TEST, a: 1, b: BBB, List : [1, 2, 3, 5, 8, 13, 21]")); } }
네
아주 간단합니다.
댓글 없음:
댓글 쓰기