goblin
리니팅
goblin

공지사항

전체 방문자
오늘
어제
  • 분류 전체보기 (75)
    • 개발 (31)
      • Spring (12)
      • JPA (4)
      • JAVA (4)
      • Python (6)
      • Docker (1)
      • Error (3)
      • Spring Cloud로 개발하는 MSA (1)
    • 알고리즘 (32)
    • 자료구조 (3)
    • 컴퓨터 개론 (3)
    • 개인 프로젝트 (4)
      • 쇼핑몰 만들기 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • JPA
  • 코딩테스트
  • 프로그래머스
  • dp
  • 파워자바
  • 스프링
  • 객체
  • 다이나믹프로그래밍
  • 다이나믹 프로그래밍
  • gradle
  • Intellij
  • 클래스
  • 파이썬
  • 자료구조
  • springboot
  • 코딩테스트연습
  • 문자열
  • 스프링부트
  • tdd
  • inflearn
  • BOJ
  • python
  • 동적계획법
  • 구현
  • 백준
  • 조합
  • 정렬
  • sorting
  • Spring
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
goblin

리니팅

[SpringBoot] 테스트 코드 작성, TDD
개발/Spring

[SpringBoot] 테스트 코드 작성, TDD

2022. 5. 17. 18:52
728x90

최근의 추세는, 대부분의 서비스 회사가 테스트 코드에 관해 요구하고 있습니다.

이 글에서는 테스트 코드 작성의 기본에 대해 다루겠습니다.

 

먼저 TDD와 단위 테스트는 다르다는 것을 알아야 합니다.

TDD는 테스트가 주도하는 개발을 뜻합니다. 테스트 코드를 꼭 먼저 작성해야 합니다.

반면 단위 테스트는 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것입니다. TDD와는 달리 테스트 코드를 먼저 작성하지 않아도 되고 리팩토링도 포함하지 않습니다. 즉, 순수하게 테스트 코드만 작성하는 것입니다.

 

이 글에서는 단위 테스트 코드에 대해 다루겠습니다.

 


테스트 코드를 작성하기에 앞서 SpringbootWebserviceApplication 클래스에 대해 소개하겠습니다. 이 클래스는 앞으로 만들 프로젝트의 메인 클래스가 됩니다.

 

@SpringBootApplication 어노테이션으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성이 모두 자동으로 설정됩니다. 특히나 이 어노테이션이 있는 위치부터 설정을 읽어가기 때문에 이 클래스는 항상 프로젝트의 최상단에 위치해야 합니다.

 

main 메서드에서 실행하는 SpringApplication.run으로 인해 내장 WAS를 실행합니다. 이렇게 되면 항상 서버에 톰캣을 설치할 필요가 없게 됩니다. 이러면 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있다는 장점이 있습니다.  

 

테스트를 위한 Controller를 만들어 보겠습니다.

com.example.springbootwebservice 패키지 하위에 controller라는 패키지를 만들어 줍니다.

그리고 이 패키지에 테스트 할 컨트롤러를 만들어 줍니다. 이름은 HelloController로 해 줍니다.

@RestController : 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어줍니다. 이전에 @ResponseBody를 각 메서드마다 선언했던 것을 한 번에 해주는 기능

 

@GetMapping : HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 줍니다.

 

이 코드가 제대로 작동하는지 테스트를 하겠습니다.

src/test/java에 main에 있는 것과 같은 패키지를 생성하고 테스트 코드를 작성할 클래스를 생성합니다.

저는 HelloControllerTest로 생성하겠습니다.

 

HelloControllerTest에 다음과 같은 코드를 작성해줍니다.

JUnit4라면 @WebMvcTest  외에도 @RunWith 을 추가했어야 했겠지만 저는 JUnit5를 사용하고 있기 때문에 이 부분은 생략해도 됩니다.

그래도 @RunWith에 대해 설명하자면 @RunWith는 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 해 주는 존재입니다. JUnit4의 경우 스프링 테스트시에 필요하지만 JUnit5에서는 생략이 가능하다고 합니다.

추가 설명은 https://www.whiteship.me/springboot-no-more-runwith/ 를 참고하면 좋을 것 같습니다.

 

@WebMvcTest : Web에 집중할 수 있는 어노테이션. @Controller, ControllerAdvice 등을 사용할 수 있지만 @Service, @Component, @Repository 등은 사용할 수 없습니다.

@WebMvcTest와 비교되는 것으로는 @SpringBootTest가 있습니다. 보통 단위 테스트에서는 전자를 사용하고 통합 테스트에서는 후자를 사용합니다. @WebMvcTest는 Web에만 집중을 해서 간단하고 빠르게 테스트를 할 때 사용할 수 있다는 장점이 있습니다.

 

@Autowired : 스프링이 관리하는 빈을 주입받습니다.

 

@private MockMvc mvc : 웹 API를 테스트할 때 사용합니다. 

 

.andExpect(status().isOk()) : mvc.perform의 결과를 검증합니다. 여기에서는 Ok(200)인지 아닌지를 검증하도록 쓰였습니다.

 


이제 테스트 코드를 실행해보겠습니다.

메서드 왼쪽의 화살표를 클릭합니다.

정상적으로 실행되었다면 다음과 같이 Test passed: 1이라는 결과가 출력될 것입니다.

테스트 코드 작성은 처음이니 브라우저로도 한 번 확인해보겠습니다.

 

메인 클래스의 메인 메서드를 실행해봅니다. ( 왼쪽의 화살표 클릭)

콘솔 창에서 톰캣이 8080 포트로 실행됐다는 것을 확인할 수 있습니다.

웹 브라우저를 열어 localhost:8080/hello로 접속하면 다음과 같은 화면으로 테스트가 정상적으로 이루어졌음을 확인할 수 있습니다.

 

 

 


참고 도서

https://book.naver.com/bookdb/book_detail.nhn?bid=15871738 

 

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

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

book.naver.com

 

 

 

 

728x90
반응형

'개발 > Spring' 카테고리의 다른 글

[Spring Boot] 도메인 계층에서 비즈니스 로직 처리  (0) 2022.07.05
[Spring Boot] Spring Boot + Gradle 프로젝트에 JPA 적용  (0) 2022.07.04
[SpringBoot] 인텔리제이로 스프링 부트 시작하기  (0) 2022.05.16
Spring Boot Validation  (0) 2022.02.05
GET API  (0) 2022.01.14
    '개발/Spring' 카테고리의 다른 글
    • [Spring Boot] 도메인 계층에서 비즈니스 로직 처리
    • [Spring Boot] Spring Boot + Gradle 프로젝트에 JPA 적용
    • [SpringBoot] 인텔리제이로 스프링 부트 시작하기
    • Spring Boot Validation
    goblin
    goblin

    티스토리툴바