본문 바로가기
스프링부트와 AWS로 혼자 구현하는 웹서비스

스프링 부트에서 테스트 코드 작성하기

by 초이사 2023. 2. 24.

이 글은 '스프링부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱(jojoldu)'을 공부하며 작성한 글입니다.

참고 깃허브 https://github.com/jojoldu/freelec-springboot2-webservice

http://www.yes24.com/Product/Goods/83849117

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - YES24

가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링

www.yes24.com

 

스프링부트 프로젝트에서 테스트 코드를 작성하고자 한다.

  • TDD(Test Driven Development): 테스트 주도 개발로 테스트 코드를 먼저 작성한다.
  • 단위테스트(Unit Test): TDD의 첫번째 단계인 기능 단위의 테스트 코드를 작성하는 것으로 하나의 모듈을 기준으로 독립적으로 작동하는 가장 작은 단위의  테스트를 말한다. 

단위 테스트 작성 이유

  • 개발 단계 초기에 문제 발견 가능
  • 추가 구현 뒤, 기존 기능이 올바르게 동작하는 지 확인하기 용이하다.
  • 기능에 대한 불확실성을 감소시킬 수 있다.
  • 단위 테스트는 시스템에 대한 실제 문서를 제공 -> 단위테스트로 테스트 문서로 사용 가능

교재에서는 단위 테스트 코드 작성법에 대해 배운다. 

 

 

Application.java 생성 (com.project.webservice에 위치)

- @SpringBootApplication이 있는 위치부터 설정을 읽는다. -> Application 클래스는 프로젝트 최상단에 위치해야 한다.

- SpringAppliction.run으로 내장 was 실행 (내장 was가 있어 매번 서버에 톰캣을 설치할 필요가 없음)

- 언제 어디서나 같은 환경에서 스프링 부트를 배포하기 위해 내장 was 사용을 권장한다.

 

 

test할 api 작성 - HelloController.java (com.project.webservice.web에 위치)

- @RestController: 컨트롤러를 JSON으로 반환하는 컨트롤러로 만든다.

- @GetMapping: HTTP Method인 GET의 요청을 받을 수 있는 api라는 의미

 

 

test 작성

 

- @ExtendWith: 스프링 부트 테스트와 JUnit 사이에 연결자 역할로 여기서는 테스트 진행시 JUnit에 내장된 실행자말고 SpringExtension라는 스프링 실행자 사용한다.

교재에서는 @RunWith(SpringRunner.class)라고 되어있는 데, Junit5가 되면서 변경되었다.

다른 설명은 코드에 주석으로 작성해두었다.

 

테스트 결과 성공

 

 

 

lombok으로 테스트 전환하기

  • 롬북(lombok): Getter, Setter, 기본생성자,toString등을 어노테이션으로 자동 생성해준다.

롬북을 인텔리제이에 설치하고 프로젝트 build.gradle의 dependencies에 등록한다.

implementation('org.projectlombok:lombok')

 

 

이때, 롬북으로 변경하고 문제가 생기는지 테스트 코드를 통해 확인할 수 있다.

 

 

HelloResponseDto.java 생성 (com.project.webservice.web.dto에 위치)

- @Getter: 선언된 모든 필드의 get 메소드 생성

- @RequiredArgsConstructor: final 필드가 포함된 생성자 생성 (final이 없는 필드는 생성자에 포함하지 않는다.)

 

 

롬북테스트 작성

- assertThat: assertj라는 테스트 검증 라이브러리의 메소드

- isEqualsTo: assertj의 동등비교 메소드로 두 값이 같다면 성공

 

테스트 결과 성공

 

 

 

HelloController에도 새로 만든 ResponseDto를 사용하기

ResponseDto를 사용하는 api 작성 및 테스트 

위에서 작성한 HelloController와 HelloCtrollerTest에 코드를 추가한다.

 

ResponseDto를 사용하는 api 작성

 

test 작성

테스트 결과 성공

 

 

 

 

 

댓글