jUnit과 Mockito를 이용한 단위테스트 기초 5일차

23 Jun 2017 JUnit, mockito

Test Coverage

테스트 커버러지

  • 단위테스트 또는 통합테스트 수행 시 테스트코드가 테스트 대상 시스템에 대하여 얼마나 점검되었는지 판단
  • 테스트코드가 테스트 대상의 로직들에 대하여 커버하는지 테스트 커버러지 비율로서 확인

테스트 커버러지 척도

  • 테스트 커버러지 분석중 가장 논란이 많은 부분이 테스트 코드의 최종 커버러지 비율
  • 단순한 수치적 비율을 놓고 이야기하게 되면 고객은 테스트 대상 시스템이 충분히 테스트 되지 않았다고 오해하게 됨
  • 테스트 커버러지에 대한 정책을 결정할 때는 중요한 모듈을 선정하고 ValueObject1 또는 Utility 와 같은 클래스를 제외한 상태에서 비율을 정의해야 함
  • 테스트 커버러지를 도입 시에는 업무상 중요도를 판단하여 테스트 대상 컴포넌트의 범위와 목표 커버리지를 정의하고 이해당사자들의 동의를 받는 것이 중요2

Test Coverage 툴의 원리

  • Code Coverage 툴의 주요 기능은 실행 중에 대한 code 라인이 수행되었는지를 검증하는 것
  • 이를 위해 Coverage 툴은 class의 각 실행 라인에 Code Coverage 툴로 log-in하는 logic을 추가
  • 기존의 class에 Coverage 분석을 위한 code를 추가하는 작업을 Instrument라고 함

Test Coverage

  • 정적 기법 : 어플리케이션이 수행되기 이전에 source code나 compile이 완료되어 있는 class 파일을Instrument하여 Instrumented class들을 만든 후 그것을 수행하는 방식
  • 동적 기법 : 원본 Class를 가지고 어플리케이션을 수행하여 runtime시에 class가 loading되는 순간에 class에 Instrumentation을 하는 방식
  • 동적 기법은 runtime에서 Code Instrumentation을 하는 부하가 발생하기 때문에, Instrumentation 양이 압도적으로 많은 Code Coverage 툴의 경우에는 정적 Instrumentation방식이 좀 더 유리
  • EMMA는 동적, 정적 Instrumentation을 모두 지원
  • 유사한 Coverage Tool인 Cobertura는 정적 Instrumentation만 지원

Emma

  • Emma 는 Java Code Coverage Tool로서 Open Source 임
  • EclEmma는 Emma 기반의 이클립스 Plug-in 프로그램
  • 코드 커버러지 분석결과는 자바 소스 편집기에서 확인가능
  • 테스트 케이스를 통해 소스의 각 라인 별로 호출여부를 확인할 수 있으며 점검결과 통계를 조회할 수 있음

Emma 설치

  • Code Coverage를 확인하기 위하여 이클립스 IDE에 EclEmma Plug-in을 설치
  • Plug-in을 설치하기 위하여 Eclipse Marketplace 에 접속

Test Coverage

  • Eclipse Marketplace 의 Find 창에서 eclemma 를 입력 후 검색을 실행
  • EclEmma Java Code Coverage가 검색되면 install 버튼을 실행하여 해당 Plug-in을 설치

Test Coverage

  • 설치할 항목을 체크한 후 Confirm 버튼을 실행
  • 라이선스에 동의하고 Finish 를 실행하며 설치가 시작

Test Coverage

  • 설치가 완료되고 이클립스를 재시작하면 EclEmma 를 사용하여 Code Coverage를 분석할 수 있음

Test Coverage

  • 테스트하고자 하는 프로젝트의 coverage As 메뉴를 선택하고 Junit Test를 실행
  • Coverage 탭의 실행결과를 확인

Test Coverage

  1. VO는 단순한 getter, setter로 구성되어 있어, 테스트 커버러지 비율을 높히기 위해 테스트 케이스를 만든것을 비효율적임 

  2. 컴포넌의 중요 로직을 대상으로 한정해야 단위 테스트를 성공할 수 있다. 커버러지 100%가 목표인 것은 배꼽이 배보다 큰 상황임