[컴] unit test 작성 범위는 ?

유닛테스트 작성방법 / 유닛테스트 작성 범위


Unit test 의 작성 범위

reddit 에 재밌는 글이 올라왔다.

대략의 내용은 "굳이 하지 않아도 되는 Unit Test 까지 만드느라고 시간을 낭비하고 있다." 정도일 듯 하다. 


우리가 unit test 를 필요로 하는 이유중 하나는 code가 추가되거나 변경될 때, 기존동작에 영향을 미치지 않는 것에 대한 확신을 가지기 위해서 이다.

개인적으로도 이 관점에서 우리가 만약 계속 확장되고, 다듬어져야 하는 project를 진행한다면 unit test 가 꼭 필요하다고 생각된다.

하지만 그렇다고 해서 모든 code 에 대한 검증을 할 필요는 없다. 그것은 시간이 너무 많이 소요되며, 크게 의미가 있지도 않다.

그럼 어떤 unit test 를 하지말아야 할까?


wrapper function 처럼 명확한 code 는 하지 않아도 된다.

위의 link 글에서도 이야기 하지만, 너무나 명확한 code는 굳이 unit test 를 작성할 필요가 없다.

위의 글에서는 아주 명확한 case 를 보여준다. 아무 일도 하지 않고, wrapper function 의 역할을 하는 method 가 예시로 나온다.


public method 에 대한 unit test 만으로 충분

원래 unit test 가 private method 에 대한 test 를 하지 않도록 되어 있지는 않다. 실제로 구글링을 해봐도 unit test 에서 private method 에 대한 test 방법들이 있다.

그래서 필자도 처음에는 특정 logic 에 대한 검증을 하기 위해 private method 라도 unit test 를 시행했다.

하지만 이런 경우 차라리 새롭게 public method 를 사용하도록 새로운 class 로 refactoring 을 하는 것이 맞는 듯 하다. 그리고 되도록 unit test 는 public method 선에서 처리하는 것이 좋은 듯 하다.

왜냐하면 private method 는 결국 public method 안에서 사용되며, private method 가 제대로 동작하지 않는다면 public method 또한 제대로 동작하지 않기 때문에 굳이 중복해서 test 를 행할 피요가 없기 때문이다.


그리고 우리가 public method 수준의 unit test 를 가지고 있어야, class 내부를 refactoring 하는 경우에 많은 private methods 들이 변경될 때 우리는 그것에 대한 unit test 를 없애고, 또 만들어야 하는 일을 하지 않아도 된다.

그러기에 우리는 public method 수준에서 unit test 를 충실하게 작성하면 충분할 것이라 생각한다.


mock up 이 필요한 경우등은 private method 를 test 해야 하는가?

그런데 간혹 외부 라이브러리 등의 문제등으로 mockup 등을 만들 수 없는 경우가 있을 수 있다. 이 경우 public method 를 검증하지 못할 수 있다. 그래서 private method 를 검증해야 할 것 같다. 하지만 만약 그런 경우의 private method 라면 새로운 class 로 만드는 것을 고려해 봐야 할 것이다. 아래 글들이 도움이 될 듯 하다.






댓글 없음:

댓글 쓰기