[SpringBoot] #2 스프링부트에서 테스트 코드를 작성하자

✨New Wisdom✨·2020년 11월 15일
0

📕 SpringBoot 📕

목록 보기
1/8
post-thumbnail

2020/05/18 에 네이버 블로그에서 작성한 내용 이사 🚗

🚩 Gradle 프로젝트를 스프링 부트 프로젝트로 변경하기

이 프로젝트의 플러그인 의존성 관리 설정을 위해 buildd.gradle 파일 맨 위에 아래 코드를 추가해준다.

  • ext : buildd.gradle에서 사용하는 전역변수를 설정
    springBootVersion 전역변수를 생성하고 값을 '2.1.7.REALESE'로 하겠다.

02. 스프링 부트에서 테스트 코드를 작성하자

🚩 Hello Controller 테스트 코드 작성하기

Application.java


SpringApplication.run으로 인해 내장 WAS를 실행한다.

+ 내장WAS(Web Application Server) ?

  • WAS
  • 웹 프로그램을 실행할 수 있는 기초적인 환경을 제공
  • ex) WebLogic, WebShpere, tomcat, Jeus, JBoss 등
  • Web Application을 수행할 수 있는 환경을 제공해주는 서버
  • Web Server
  • html 페이지 등을 네트워크망에 종속되지 않고 웹서비스를 할 수 있도록 해주는 어플리케이션
  • http를 통해 웹 브라우저에서 요청하는 html 문서나 오브젝트를 전송해주는 서비스 프로그램
  • ex) Apache, WebtoB 등
  • Web Server VS Web Application Server ?
  • 웹서버는 웹 문서(html 등,,)을 http 규약에 따라 웹 클라이언트와 주고받으며 통신하는 역할
  • 웹애플리케이션은 서버 단에서 애플리케이션을 동작할 수 있도록 지원, 기존 웹서버와 달리 동적인 요구에 대응하기 위한 형태로 변화, 브라우저에게는 결과값만 전송, Container 라는 용어로 쓰임

여튼 이렇게 내장 WAS를 쓰면 톰캣 없이도 스프링 부트로 만들어진 jar(실행 가능한 자바 패키징 파일)로 실행한다.

Q. 왜 내장 WAS를 쓰나?

A. 언제 어디서나 같은 환경에서 스프링 부트 배포 가능

간단한 API 만들어 보기-!

HelloController.class

@RestController

  • 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어줌

@GetMapping

  • HTTP 메소드인 Get의 요청을 받을 수 있는 API 생성
  • 이 예제에서는 '/hello'로 요청이 오면 문자열 hello를 반환하는 기능

HelloControllerTest.java

@RunWith(SpringRunner.class)

  • 테스트할 때 JUnit에 내장된 실행자 외에 다른 실행자 실행시킴
  • 여기서는 SpringRunner라는 스프링 실행자 사용
  • 스프링 부트 테스트와 JUnit 사이에 연결자 역할

@WebMvcTest

  • Web에 집중할 수 있는 어노테이션
  • 덕분에 사용 가능 : @Controller, @ControllerAdvice 등
  • 사용 불가능 : @Service, @Component, @Repository 등

@Autowired

  • 스프링이 관리하는 bean 주입 받음

private MockMvc mvc

  • 웹 API 테스트 할 때 사용
  • 스프링 MVC 테스트의 시작점
  • 이 클래스 통해서 http의 get, post등에 대한 API 테스트 가능

mvc.perform(get("/hello"))

  • '/hello' 주소로 get 요청
  • 체이닝이 지원되어 아래와 같은 여러 검증 가능
    .andExpect(status().isOK())
  • mvc.perform의 결과 검증
  • http의 header의 status 검증
    .andExpect(content().string(hello))
  • mvc.perform의 결과 검증
  • 응답 본문의 내용 검증
  • 이 예제에서는 컨트롤러에서 "hello"를 리턴하기 떄문에 이 값이 맞는지 검증

🚩 롬복

자바 개발을 할 때 자주 사용하는 코드(getter,setter 등,,)를 어노테이션으로 자동으로 생성해줌
프로젝트마다 롬복 설정해줘야함

🚩 Hello Controller 코드를 롬복으로 전환하기

HelloResponseDto.class

+ DTO ?

Data Transfer Object의 줄임말로, 계층간 데이터 교환을 위한 자바빈즈.

@Getter

  • 선언된 모든 필드의 get 메소드를 생성

@RequiredArgsConstructor

  • 선언된 모든 final 필드가 포함된 생성자를 생성
  • final이 없는 필드는 생성자에 포함 안됨

HelloResponseDtoTest.class

assertThat

  • assertj라는 테스트 검증 라이브러리의 검증 메소드
  • 검증 대상을 인자로 받음
  • 체이닝 지원

isEqualTo

  • assertj의 동등 비교 메소드
  • assertThat에 있는 값과 isEqualTo의 값 비교해서 같을 때만 성공

annotationProcessor('org.projectlombok:lombok') 오류났었는데 구글링해보니까
gradle.build의 dependencies에 밑 코드 추가해야한다.

annotationProcessor('org.projectlombok:lombok')

HelloController.java 추가

@RequestParam

  • 외부에서 API로 넘긴 파라미터를 가져오는 어노테이션
  • 여기서는 외부에서 name이란 이름으로 넘어온 파라미터를 메소드 파라미터 name에 저장

HelloControllerTest.class 추가

param

  • API 테스트할 때 사용될 요청 파라미터 설정
  • 단 값은 String 만 허용됨

jsonPath

  • JSON 응답값을 필드별로 검증할 수 있는 메소드
  • $를 기준으로 필드명 명시

공부한 내용 벨로그에 저장 위해 이사중 ➿🙃

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/

0개의 댓글