[Springboot] 스프링 부트에서의 테스트 코드

2023. 1. 26. 00:38·개발 공부/Spring
728x90
반응형

스프링부트에서의 테스트 코드

최근 회사 채용 공고를 보면 테스트 경험에 대한 경험을 요구한다. 또한 TDD라는 테스트 주도 개발 경험을 요구하는 곳들도 있다. 참고책에서는 TDD가 아닌 단위 테스트 코드에 대해 기술한다.

 

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

1. 빠른 피드백

- 개발을 하는 과정에서 테스트 코드가 없다면 코드 수정 -> 프로그램 실행 -> API테스트 도구로 HTTP 요청 -> 출력 후 검증 -> 다시 코드 수정 과정을 거친다. 하지만 테스트 코드가 작성된다면 코드 수정 후 간단하게 테스트 코드만 실행시키면 되기 때문에 빠른 피드백을 받을 수 있다.

 

2. 검증

- 테스트 코드를 작성하면 직접 print문을 작성하여 눈으로 확인해야하는 것들을 자동으로 검증해준다.

 

3. 기능 보호

- 기존 서비스에서 기능이 추가가 될 때, 기존 기능이 잘 작동되는지 보장해주는 역할을 한다. 즉, 기능을 추가한 뒤, 기존의 기능이 잘 작동되는지 확인하기 위해 사용된다.

 

해당 책에서는 자바의 테스트 도구인 JUnit4을 사용한다.

 

코드 작성

src/main/java 폴더 안에 패키지를 생성하고 다음과 같이 작성

package com.jojoldu.book.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//어노테이션으로 인해 스프링부트 자동설정, 스프링 Bean읽기, 생성 자동으로 설정
@SpringBootApplication
public class Application { //프로젝트의 메인 클래스
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args); //내장 WAS실행
    }
}

해당 코드는 외부에 WAS를 두지 않고 내부에서 WAS를 실행한다. 그러면 톰캣을 사용할 필요가 없고, 생성된 Jar파일로 실행할 수 있다.

내장 WAS를 사용하면 '언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있다'는 장점이 있다.

 

컨트롤러 작성

하위 패키지로 web을 생성하고 간단한 getAPI 작성해준다.

package com.jojoldu.book.springboot.web;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

 

다음은 테스트 폴더로 가서 테스트 파일을 생성해준다.

package com.jojoldu.book.springboot;


import com.jojoldu.book.springboot.web.HelloController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;


import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

//스프링부트 테스트와 JUnit사이의 연결자 역할
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc; //웹 api 테스시 하용, mvc 테스트의 시작점

    @Test
    public void hello가_리턴() throws Exception{
        String hello = "hello";

        mvc.perform(get("/hello"))
                .andExpect(status().isOk()) //결과가 200인지 검증
                .andExpect(content().string(hello)); // 응답 본문의 내용 검증
    }
}

 

작성한 뒤 hello가_리턴 함수를 실행하면 테스트 성공한 것을 확인할 수 있다.

 

 

 

 

참고 문헌

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

 

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

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

www.yes24.com

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

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

[SpringBoot] JPA로 데이터베이스 다루기  (0) 2023.01.28
[SpringBoot] 롬복 소개 및 설치  (0) 2023.01.27
[SpringBoot] 스프링부트 프로젝트 세팅하기  (0) 2023.01.25
[Spring] 인프런 스프링 입문 강의 정리 #5  (0) 2022.06.26
[Spring] 인프런 스프링 입문 강의 정리 #4  (0) 2022.06.25
'개발 공부/Spring' 카테고리의 다른 글
  • [SpringBoot] JPA로 데이터베이스 다루기
  • [SpringBoot] 롬복 소개 및 설치
  • [SpringBoot] 스프링부트 프로젝트 세팅하기
  • [Spring] 인프런 스프링 입문 강의 정리 #5
9_yoon
9_yoon
배울게 넘쳐나는 개발 세상에서 묵묵히 걸어가며 지식을 쌓는 신입 개발자
  • 9_yoon
    개발저장소
    9_yoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • 알고리즘 (52)
        • BJ (40)
        • 프로그래머스 (0)
        • SWEA (10)
        • JO (2)
      • 이론 공부 (8)
        • 네트워크 (2)
        • 알고리즘 (2)
        • Java (1)
        • Web (2)
        • 기타 (1)
      • 개발 공부 (36)
        • Project (1)
        • JavaScript (1)
        • Typescript (1)
        • Spring (12)
        • Java (2)
        • Next JS (7)
        • React (3)
        • Vue (1)
        • Web (6)
        • 기타 (2)
      • 기타 (8)
        • SSAFY (7)
        • 일상 (0)
        • 회고 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    SSAFY
    spring
    노마드코더 nextjs
    styled component
    김영한 스프링
    boj 1065
    백준 1065
    NextJS
    백준
    nextjs 시작하기
    스프링
    노마드코더
    김영한 인프런
    싸피
    Typescript
    React
    싸피7기
    SWEA
    싸피 7기
    노마드코더 Next
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
9_yoon
[Springboot] 스프링 부트에서의 테스트 코드
상단으로

티스토리툴바