단위 테스트를 작성함으로써 얻는 이점
- 개발단계 초기에 문제를 발견하게 도와준다
- 개발자가 나중에 코드를 리팩토링하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있다.
- 기능에 대한 불확실성을 감소시킬 수 있다.
- 시스템에 대한 실제 문서를 제공. 즉, 단위 테스트 자체가 문서로 사용할 수 있다.
단위 테스트를 배우기 전의 개발 방식
- 코드 작성
- Tomcat 실행
- 브라우저 or Postman과 같은 API 테스트 도구로 HTTP 요청
- 요청 결과를 System.out.println()으로 검증
- 결과가 다르면 Tomcat 중지 후 코드 수정
2~5 반복
MVC Test Sample
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception {
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
@Test
public void helloDto가_리턴된다() throws Exception {
String name = "hello";
int amount = 1000;
mvc.perform(get("/hello/dto")
.param("name", name)
.param("amount", String.valueOf(amount)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name", is(name)))
.andExpect(jsonPath("$.amount", is(amount)));
}
}
- @RunWith(SpringRunner.class)
- 테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행
- 스프링 부트 테스트와 JUnit 사이에 연결자 역할
- @WebMvcTest
- 여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션
- 선언할 경우 @Controller, @ControllerAdvice 등을 사용 가능
- 단, @Service, @Coponent, @Repository 등은 사용 불가
- @Autowired
- 스프링이 관리하는 빈(Bean)을 주입
- private MockMvc mvc
- 웹 API를 테스트할 때 사용
- 스프링 MVC 테스트의 시작점
- HTTP GET, POST 등에 대한 API 테스트 가능
- mvc.perform(get("/hello"))
- MockMvc를 통해 /hello 주소로 HTTP GET 요청
- 체이닝이 지원되어 아래와 같이 여러 검증 기능을 이어서 선언 가능
- .andExpect(status().isOk())
- mvc.perform의 결과를 검증
- HTTP Header의 Status를 검증
- 200인지 아닌지 검증
- .andExcpect(content().string(hello))
- mvc.perform의 결과를 검증
- 응답 본문의 내용을 검증
- param
- 요청 파라미터 설정
- String만 허용 (숫자/날짜 등의 데이터도 등록할 때는 문자열로 변경 필요)
- jsonPath
- JSON 응답값을 필드별로 검증할 수 있는 메서드
- $를 기준으로 필드명을 명시
기능 테스트
@Test
public void 롬복_기능_테스트() {
//given
String name = "test";
int amount = 1000;
//when
HelloResponseDto dto = new HelloResponseDto(name, amount);
//then
assertThat(dto.getName()).isEqualTo(name);
assertThat(dto.getAmount()).isEqualTo(amount);
}
- assertThat
- assertj라는 테스트 검증 라이브러리의 검증 메서드
- 메서드 체이닝이 지원되어 isEqualTo와 같이 메소드를 이어서 사용 가능
- isEqualTo
- assertj의 동등 비교 메서드
- assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공
'SPRING' 카테고리의 다른 글
Custom Annotation 기반으로 Session 정보 가져오기 (0) | 2023.05.02 |
---|---|
Spring 웹 계층 (0) | 2023.04.24 |
JPA Annotation (0) | 2023.04.24 |
Lombok Annontation (0) | 2023.04.06 |
ERROR [builder 8/8] RUN ./gradlew bootJar (0) | 2023.01.02 |