스프링부트에서의 테스트 코드
최근 회사 채용 공고를 보면 테스트 경험에 대한 경험을 요구한다. 또한 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
'개발 공부 > 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 |