테스트코드

테스트코드란 내가 작성한 메서드가 실제로 재대로 동작하는지 테스트 하는 코드이다.

TDD

TDD란 테스트가 주도하는 개발이다.
실패하는 테스트코드 작성 -> 테스트가 성공하는 프로덕션코드 작성 -> 테스트가 성공하면 프로덕션 코드를 리팩토링 하는식으로 개발을 한다.

테스트코드를 작성하는 이유

  1. 단위 테스트는 개발단계 초기에 문제를 발견하게 도와준다.
  2. 단위 테스트는 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지를 확인 할 수 있다.
  3. 단위 테스트는 기능에 대한 불확실성을 감소시킬 수 있다.
  4. 단위 테스트는 시스템에 대한 실제 문서를 제공한다.(단위 테스트 자체가 문서로 사용가능)

현재 테스트코드를 작성하기 전에 개발방법

  1. 프로덕션 코드를 작성
  2. 웹서버(톰켓)을 실행
  3. postman과 같은 api 테스트 도구를 사용하거나 직접 화면을 만들어 버튼등으로 통신하여
    요청
  4. 요청결과를 system.out.println이나 웹에서는 console.log를 이용하여 값을 출력
  5. 에러가 나거나 원하는 결과값이 나오지 않으면 웹서버를 중지시키고 다시 코드를 수정
  6. 1~5을 결과가 재대로 도출될때까지 무한반복

테스트코드에 대한 나의 생각

나는 교육이나 간단한 java application을 통하여 tdd를 진행을 하였다.
일단 도메인을 이해하고 개발하려면 데스트코드는 선택이 아닌 필수인것 같다.
난 전 회사에서 테스트코드를 짜본적이 없다. 인턴으로 1달반정도 있을때는 ci와 테스트코드를
다 사용해봤지만 정작 오래동안 있던 곳에서는 그런적이 없었다.. 정말 위에 글처럼 테스트시
시간이 어마어마하게 걸린다. 보통 서비스하는 곳마다 다르지만 기본적으로 업체당 화면이 100개
이상은 존재했었다. 정말 많은 업체는 3~400개도 되어있었던것 같다.
테스트코드에 익숙하지 않으면 시간이 더 오래걸릴 수도 있겠지만 배포하고 오류가나거나 버그발생시 문제되는것 보다 100배 아닌 1000배 이상의 효과가 발생된다.

테스트코드 개발방법


기본적으로 패키지 구조는 main과 test로 나뉘어진다.(이클립스도 동일)
해당 테스트 패키지에서 마우스 우클릭 -> 클래스명+Test.class로 테스트 코드를 작성한다.
(인텔리제이기준 ctrl + shift + t를 누르면 테스트클래스를 생성 할 수 있다.)
책은 junit 4.x버전을 기준으로 작성되어 있지만 나는 5.x버전으로 테스트 코드를 작성하였다.


의존성이 주입되는 부분에서는 @springbootTest나 @webMvcTest등 테스트 기반에 대한 어노테이션을 정의 해야한다.
그리고 테스트 코드에서는 @Test라는것을 명시하여 해당 메서드가 테스트코드에 대한 메서드인지 작성을 해야 한다.
Junit 4버전에서는 @RunWith(SpringRunner.class)가 명시되어야 한다.
그리고 junit5번에는 더이상 사용하지 않고 @ExtendWith를 사용하게 된다.
그리고 지금 책에서의 테스트코드는 별 차이가 없어서 무난하게 5버전을 사용해도 무리가 없었다.

MockMvc

mockMvc란 서블릿 컨테이너의 구동없이 mvc환경에 모의 http 서블릿 요청을 전송하는 기능을 제공하는 유틸리티 클래스이다.
controller를 테스트할때 사용한다.

이번 챕터의 나의 생각

이책에 앞서 소개가 된이유는 중요하다고 생각되기 때문이다. 솔직히 이 책을보면서 구축하면서
테스트코드를 안짜도 프로그램을 실행된다. 하지만 정작 오류가 발생시 디버깅 포인트부터
난감할 것이다. 단순 튜토리얼이라고 따라하기보다는 코드를 작성할때 테스트코드를 작성하는 습관을 가지는 것이 중요하다.

profile
긍정적인 삶을 갖자~~

1개의 댓글

comment-user-thumbnail
2024년 9월 4일

혹시 어떤 책인지 알 수 있을까요 ?

답글 달기