1. TDD vs Unit Test
- TDD와 Unit Test는 다르다.
1) TDD (Test Driven Development) '테스트 주도 개발'
- 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스
- 항상 실패하는 테스트를 먼저 작성하고 (Red)
- 테스트가 통과하는 프로덕션 코드를 작성하고 (Green)
- 테스트가 통과하면 프로덕션 코드를 리팩토링 (Refactor)
2) Unit Test '단위테스트'
- 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트
- 모듈 : 애플리케이션에서 작동하는 하나의 기능 또는 메소드
2. Unit Test의 장단점
1) 장점
- 개발단계 초기에 문제를 발견하게 도와준다.
- 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있다.
- 기능에 대한 불확실성을 감소할 수 있다.
- 시스템에 대한 실제 문서 제공. 즉, 단위 테스트 자체가 문서
2) 단점
- 진입 장벽이 높음
- 테스트 코드 작성에 시간이 소요
3. 테스트 코드 작성 프레임 워크
- Java - JUnit
- DB - DBUnit
- C++ - CppUnit
- .net - NUnit
4. HelloController 테스트 코드 작성
1) Main Class
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
(1) @SpringBootApplication
- 스프링 부트의 자동설정, 스프링 Bean 읽기와 생성을 모두 자동으로 설정
- @SpringBootApplication이 있는 위치부터 설정을 읽음 -> 프로젝트의 최상단에 있어야함.
(2) SpringApplication.run
- 별도로 외부에 WAS를 두지 않고 애플리케이션을 실행할 때 내부에서 WAS를 실행 (내장 WAS)
=> 톰캣 설치 X, 스프링 부트로 만들어진 Jar 파일로 실행
=> 내장 WAS 사용 권장 -> '언제 어디서나 같은 환경에서 스프링 부트를 배포'
2) HelloController
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
(1)@RestController
- 컨트롤러를 JSON을 반환하는 컨트롤러로 만든다.
(2) @GetMapping
- HTTP Method인 Get의 요청을 받을 수 있는 API를 만들어준다.
- /hello로 요청이 오면 문자열 "hello" 반환
3) HelloControllerTest
@WebMvcTest
public class HelloControllerTest{
@Autowired
private MockMvc mvc;
@Test
void ht() throws Exception{
String hello = "hello";
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/hello");
mvc.perform(builder)
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
(1) @WebMvcTest
- 여러 스프링 테스트 어노테이션 중, Web에 집중할 수 있는 어노테이션
- 선언할 경우 @Controller, @ControllerAdvice 등을 사용 가능
- 단, @Service, @Component, @Repository는 사용 불가
(2) @Autowired
- 스프링이 관리하는 Bean을 주입받는다.
(3) private MockMvc mvc
- 웹 API를 테스트할 때 사용
- 스프링 MVC 테스트의 시작점
- 이 클래스를 통해 HTTP GET, POST 등에 대한 API 테스트를 할 수 있다.
(4) MockMvcRequestBuilders
- MockMvcRequestBuilders의 메소드들은 GET, POST, PUT, DELETE 요청방식과 매핑되는 get(), post(), put(), delete() 메소드 제공
- 이 메소드들은 MockHttpServletRequestBuilder 객체 리턴, 이를 통해 HTTP 요청 관련 정보를 설정할 수 있다.
- MockMvcRequestBuilders의 메소드는 MockHttpServletRequestBuilder 객체를 다시 리턴하여 메시지 체인을 구성하여 복잡한 요청을 설정할 수도 있다.
(5) mvc.perform(builder)
- perform을 통해 요청 메소드에 따라 MockMvc를 실행
(6) .andExpect(status().isOk())
- mvc.perform의 결과 검증
- HTTP Header의 Status 검증
(7) .andExpect(content().string(hello))
- 응답 본문의 내용 검증
- Controller에서 "hello"를 리턴하기 때문에 이 값이 맞는지 검증
'스프링부트와 AWS로 혼자 구현하는 웹서비스' 카테고리의 다른 글
Part 6. 등록/수정/조회 API 만들기 (0) | 2023.12.17 |
---|---|
Part5. 프로젝트에 Spring Data JPA 적용 (0) | 2023.12.14 |
Part 4. JPA (0) | 2023.12.08 |
Part 3. 롬복 (0) | 2023.12.07 |
Part 1. 그레이들 프로젝트를 스프링 부트 프로젝트로 변경하기 (0) | 2023.12.06 |