Coding Note
스프링 부트 - 테스트 코드 작성하기! 본문
악!!!!!!!!!!!!! 너무 어렵잖아..
오류 해결하는데 하루 걸렸다ㅠㅠ
그래도 해결했으니 다행이야!!
그럼 풀이해보자
1. 테스트 코드란?
- 자동 검증 가능
- TDD와 단위 테스트는 다르다.
TDD | 단위테스트 |
- 테스트가 주도하는 개발 - 구현 -> 테스트 -> 리팩토링 |
- 기능 단위의 테스트 코드 작성 - 테스트 코드만 작성함 - 개발 단계 초기 문제 발견 가능 - 자동 검증 가능 - 개발자가 만든 기능 보호 - 문서로 사용할 수 있음 - 톰캣 서버 내렸다가 다시 실행 반복 안해도 됨 |
2. HelloController 테스트 코드 작성하기
"스프링 부트의 AWS로 혼자 구현하는 웹 서비스" 책 기반임으로 JUnit4 버전을 사용하고 있다!
JUnit4 버전 확인 및 수정은 전 게시물을 통해서 확인할 수 있다.
[src -main - java - New - Package] 패키지를 생성한다.
패키지 명은 웹 사이트 주소 역순으로 작성한다.
클래스 생성하기
[new - java class] 클래스 이름은 Application으로 지정한다.
- Application
package com.bs.book.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
- 스프링 부트 자동 설정, 스프링 Bean 읽기와 생성 모두 자동으로 설정된다.
- 이 클래스 기준으로 설정을 읽어가기 때문에 항상 프로젝트의 최상단에 위치해야만 한다.
Q1. 내장 WAS (Web Application Server, 웹 애플리케이션 서버)
- 외부에 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행하는 것
- 즉, 서버에 톰캣을 설치할 필요가 없게 되므로 Jar 파일로 실행하면 된다.(시간 효율)
위 패키지 아래 Web 패키지를 생성합니다.
- Web
package com.bs.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";
}
}
@RestController
- 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 준다.
- @ResponseBody 각 메서드마다 선언했던 것을 한 번에 사용할 수 있게 해주는 클래스
@GetMapping
- HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어 준다.
- @RequestMapping(method =RequestMethod.GET) 대체
그럼 HelloControllerTest를 진행해보자!
[src -main - test - java - New - Package] 패키지를 생성한다.
패키지에 'HelloControllerTest' 클래스를 생성한다.
- HelloControllerTest
package com.bs.book.springboot;
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;
@RunWith(SpringRunner.class)
@WebMvcTest
public class HelloControllerTest {
//스프링이 관리하는 빈(bean)을 주입받음
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception {
String hello = "hello";
//"/hello" 주소로 HTTP GET 요청
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
@RunWith(SpringRunner.class)
- 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행함.
- SpringRunner라는 스프링 실행자를 사용.
- 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 함.
@WebMvcTest
- 어노테이션 중, Web(spring MVC)에 집중할 수 있는 어노테이션
- 선언시 Controller, @ControllerAdvice 등을 사용할 수 있음
- 단!!! @Service, @Component, @Repository등은 사용할 수 없음.
private MockMvc mvc;
- 웹 API를 테스트 할때 사용
- 스프링 MVC 테스트의 시작점
- HTTP GET, POST등에 대한 API 테스트를 진행할 수 있음.
.andExpect(status().isOk())
- mvc.perform의 결과 검증
- HTTP Header의 Status를 검증
- 서버 상태를 검증 (200,404,500 등)
- 여기선 Ok =200인지 검증
.andExpect(content().string(hello));
- mvc.perform의 결과 검증
- 응답 본문의 내용 검증
- 리턴 값 검증
실행시키면 잘 오류 없이 빌드가 되는 걸 확인할 수 있다!
여기서 에러도 정리하고 가자!
에러 정리하기 >
1. import 에러
- alt + enter로 import 하면 됨
STS에서 ctrl + enter로 import 해서 당연히 같을 줄 알았는데 아니었다.
2. 404 에러
에러 코드 >
@WebMvcTest 클래스는 컨트롤러를 사용할 수 있는 기능으로 별도로 작성 안 해도 된다.
마지막 단계로 커밋도 완료!!
'SpringBoot > AWS_PJ' 카테고리의 다른 글
JPA Auditing으로 생성 시간/수정 시간 자동화하기! (0) | 2022.03.08 |
---|---|
등록,수정, 조회 API 만들기! (0) | 2022.03.08 |
JPA로 데이터베이스 다루기! (0) | 2022.03.08 |
JPA 소개하기 및 데이터 베이스 다루기 (0) | 2022.03.07 |
Lombok 설치하기 (0) | 2022.03.01 |