단위테스트
단위테스트 vs TDD
TDD: 테스트가 주도하는 개발 (레드 그린 사이클)
- 항상 실패하는 테스트 먼저 작성 (Red)
- 테스트가 통과하는 프로덕션 코드 작성 (Green)
- 테스트가 통과하면 프로덕션 코드를 리펙토링 (Refactor)
단위테스트: 기능 단위의 테스트 코드를 작성하는 것 (순수하게 테스트 코드를 작성하는 것)
단위 테스트의 장점
- 단위 테스트는 개발 단계 초기에 문제를 발견하게 도와준다.
- 단위 테스트는 개발자가 나중에 코드를 리펙토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있다.
- 단위 테스트는 기능에 대한 불확실성을 감소시킬 수 있다.
- 단위 테스트는 시스템에 대한 실제 문서를 제공한다.
(즉, 단위 테스트 자체가 문서로 사용할 수 있다.)
스프링 부트 실행 Application 클래스 작성
@SpringBootApplication
- 프로젝트 최상단에 위치하는 클래스
- 스프링 부트는 @SpringBootApplication이 있는 위치부터 설정을 읽어간다.
- 스프링 부트의 자동설정, 스프링 Bean 읽기와 생성을 자동으로 설정
SpringApplication.run
- 내장 WAS (Web Application Server, 웹 어플리케이션 서버) 실행
- 스프링 부트로 만들어진 Jar 파일(실행 사능한 Java 패키징 파일)로 실행 가능
내장 WAS를 사용하는 이유
- 항상 서버에 톰캣을 설치할 필요가 없다.
- 언제 어디서나 같은 환경에서 스프링 부트를 배포할 수 있다.
- 외부 WAS를 쓸 경우 모든 서버는 WAS의 종류와 버전, 설정을 일치시켜야 한다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
컨트롤러 관련 클래스를 저장할 패키지 생성
- 패키지 및 컨트롤러 생성
- web
- HelloController
- @RestController
- 컨트롤러를 JSON 데이터 타입을 반환하는 컨트롤러로 설정
- 기존 Spring Framework의 경우 @ResponseBody를 각 메서드에 선언
- @GetMapping
- Http Method인 Get의 요청을 받을 수 있는 API 설정
- 기존 Spring Framework의 경우 @RequestMapping(method= RequestMethod.GET)으로 사용
- "/hello"로 요청이 오는 경우 문자열 hello을 반환
- @RestController
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
Test API 작성
- HelloController를 테스트 할 HelloControllerTest 클래스 작성
- @RunWith(SpringRunner.class)
- 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행
- SpringRunner는 스프링 실행자
- 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 한다.
- @WebMvcTest
- 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션
- @Controller, @ControllerAdvice 등을 사용할 수 있다.
- @Service, @Component, @Repository 등은 사용할 수 없다.
- @Autowired
- 스프링이 관리하는 빈(Bean)을 주입
- MockMvc mvc
- 웹 API 테스트 시 사용
- 스프링 MVC 테스트의 시작점
- HTTP GET, POST 등에 대한 API를 테스트 할 수 있다.
- mvc.perform(get("/hello"))
- MockMvc를 통해 /hello 주소로 Http GET 요청 가능
- 체이닝을 지원하여 여러 검증 기능을 이어서 선언할 수 있다.
- .andExcept(status().isOk())
- mvc.perform의 결과를 검증
- HTTP Header의 Status를 검증
- .andExcept(content().string(hello))
- mvc.perform의 결과를 검증
- 응답 본문의 내용을 검증
- .andDo(print())
- MockHttpServletRequest
- Handler
- Async
- Resolved Exception
- ModelAndView
- FlashMap
- MockHttpServletResponse 등의 내용의 결과 값을 확인 할 수 있다.
- @RunWith(SpringRunner.class)
@RunWith(SpringRunner.class)
@WebMvcTest
public class HelloControllerTest {
@Autowired
private MockMvc mvc ;
@Test
public void return_hello() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
테스트 코드 검증
- 테스트 코드 결과 값 확인
수동 실행으로 검증 (이슈)
- 오라클 설치로 인한 포트 중복 이슈
- SpringBoot 실행 시 Apache Tomcat의 기본 포트는 8080이기 때문에 포트를 변경하여 실행
- application.properties 파일 내에 apache tomcat port 수정을 위한 설정
# server setting
server.port=8085
port 중복으로 인한 이슈 처리완료 및 /hello URL에 접근하여 "hello" 확인
'Spring > SpringBoot' 카테고리의 다른 글
[SpringBoot] Posts API 만들기 (2) | 2020.05.28 |
---|---|
[SpringBoot] 설정파일 yaml로 변경하기 (0) | 2020.05.28 |
[SpringBoot] Spring Data JPA 설정 (0) | 2020.05.28 |
[SpringBoot] lombok 설정 및 테스트 (0) | 2020.05.28 |
[SpringBoot] IntelliJ에서 SpringBoot시작하기 (0) | 2020.05.27 |