1. 테스트

2. Slice Test

3. 테스트 유틸(패스)

1. 테스트

1-1) 의존성 체크

Untitled

1-2) SsuController

Untitled

1-3) SsuService

Untitled

1-4) SpringBootTestCodeApplicationTest**(WebEnvironment.MOCK일 때)**

1-4)-1. @Runwith

@Runwith은 JUnit5부터는 사용하지 않음.

1-4)-2. webEnvironment 속성

MOCK(mock servlet environment) : 내장 톰캣을 사용하지 않음.

RANDOM_PORT / DEFINED_PORT :내장 톰캣을 사용함.

NONE : 서블릿 환경을 제공하지 않음.

1-4)-3. @AutoConfigureMockMvc

@Autowired를 사용해서 주입받는 방법이 가장 좋음.

1-4)-4. status().isOk()

status의 코드가 200, 정상인지 확인하는 거임.

1-4)-5. content().string(

출력되는 결과 값이 expectedContent, "hello ssu"와 동일한지 확인하는 거임.

1-4)-6. andDo()

요청에 대한 처리를 해주는 메소드임. print() 메소드가 들어옴.

Untitled

1-5) SpringBootTestCodeApplicationTest**(WebEnvironment.RANDOM.PORT일 때)**

1-5)-1. WebEnvironment.RANDOM_PORT

실제 Servlet Container인 내장 톰캣이 뜸. 이때부터는 MockMvc가 아니라

테스트용 REST template이나 테스트용 web Client를 사용해야 함.

1-5)-2. TestRestTemplate testRestTemplate

주입 받기

1-5)-3. getForObject("/hello", String.class)

url("/hello)을 주고 원하는 바디 타입을 준 다음(String.class),

이 값을 assertThat으로 확인함.

1-5)-4. 문제점

SsuService단까지 가기 때문에 테스트가 다소 길어질 수 있음.

SsuController까지만 테스트 하고 싶은 경우

Untitled

1-6) SsuService단이 아닌 SsuController까지만 Test하고 싶을 때

1-6)-1. @MockBean

application context안에 들어있는 빈을 MockBean으로 교체함.

1-6)-2. SsuService mockService

SsuController까지만 돌기 위해서 SsuService를 받아왔음.

이렇게 하면 application context안에 있는 SsuService Bean이 mockbean으로 교체 됨.

따라서 SsuService는 mockService를 사용하게 됨.

1-6)-3. thenReturn()

기존 SsuService에서는 ssu를 리턴해줬지만 mockSsuService에서는 "ssuzy"를 리턴하도록 함.

따라서 출력되는 값은 "hello ssuzy"이 되므로 비교 값을 변경했음.

Untitled

1-7) WebTestClient**(asynchronous, 비동기)**

1-7)-1. WebTestClient

WebClient는 SpringMVCWebflux쪽에 추가된 Rest Client 중 하나임. 우리가 기존에 사용하던

Rest Client는 synchronous(동기)임. 즉, 요청 하나를 보내면 그 요청이 끝날 때까지 기다린 다음

요청을 보낼 수 있음. 반면에 WebClient는 asynchronous(비동기)임. 요청을 보내고

기다리는 것이 아니라 응답이 오면 call back이 event로 오기 때문에

그때 call back을 실행할 수 있음.

테스트 코드에서 WebTestClient를 사용해서 WebClient와 비슷한 API를 사용할 수 있음.

WebClient를 사용하려면 Spring Web flux 디펜더시 추가

Untitled

1-7)-2. WebTestClient Test Code

Untitled

2. Slice Test

2-1) Slice Test

지금까지 해온 테스트는 모두 통합 테스트임. 자신이 원하는 빈만 등록하고 싶은 경우 사용하는 게

Slice Test임. 이 테스트는 레이어별로 잘라서 적용하기 때문에 @JsonTest, @WebMvcTest,

@WebFluxTest, @DataJpaTest 등 다양한 테스트 어노테이션이 있음.

2-2) @WebMvcTest

MVC를 위한 테스트 어노테이션으로 클래스를 특정해서 테스트할 수 있음.

또한 Web Layer만 빈으로 등록하기 때문에 가볍고 빠름.

Web Layer, @Controller, @JsonComponent, Converter, GenericConverter, Filter,

WebMvcConfigurer, HandlerMethodArgumentResolver임.

일반적으로 컴포넌트들은 빈으로 등록되지 않음.

⇒ 따라서 모든 의존성이 끊기기 때문에 사용하는 의존성이 있으면 @MockBean으로 채워져야 함.

Untitled

3. 테스트 유틸