kok202
스프링 부트 강의 정리 (21~22 : 테스트 자동 설정 Annotations)

2019. 4. 28. 02:14[공부] 영상/스프링 부트 강의

spring-boot-test-autoconfigure

Configuration 을 슬라이싱해서 원하는 설정파일만 불러와서 테스트를 진행할 수 있도록 도와준다.

대부분의 @~Test 은 excludeAutoConfiguration 을 지원하므로 이를 사용하면 된다. (ex @JsonTest)

슬라이싱에 관심이 없으면 그냥 @SpringBootTest를 쓰면 된다.

 

말했다시피 @SpringBootTest는 메인 어플리케이션에 등록된 모든 설정파일을 읽어들인다. 그러므로 가능하면 @EnableBatchProcessing 과 같은 특정 목적을 위한 설정은 메인 어플리케이션에 달아두지 말자. 따로 Configuration 클래스를 둬서 관리하는 것이 좋다. 그렇지 않으면 이 설정을 받아들이는 테스트들이 Spring-Batch도 실행하려고 시도할 것이다.

 

 

 

 

 

@WebMvcTest

스프링 MVC 컨트롤러가 제대로 동작하는지 테스트하고 싶으면 @WebMvcTest를 사용하면된다.  @WebMvcTest는 스프링 MVC 컨트롤러가 제대로 동작하는지만을 확인하고 싶을 때 사용한다. MVC 관련 인프라 설정을 다 세팅해주고 @Service, @Repository 를 제외한 @Controller, @ControllerAdvice, @JsonComponent 등을 Scan 한다. 더불어 테스트 클라이언트로 MockMvc를 기본적으로 사용할 수 있다,

 

 

 

 

 

@WebMvcTest

WebFlux 를 통해 TestWebClient 으로 테스트할 수 있다. WebFlux 를 pom.xml 을 통해 불러와야한다.

 

 

 

 

 

@DataJpaTest

1. JPA를 테스트할 수 있다.

2. 내장된 인메모리 DB로 테스트한다. -> 빠르다.

3. 엔티티 정보를 스캔한다.

4. Spring data JPA Repository를 설정해준다.

5. TestEntityManager : 표준 JPA EntityManager를 사용할 수 있다.

* 일반적인 @Component Bean 들은 생성되지 않는다.

@AutoConfigureTestDatabase(replace=Replace.NONE) 을 테스트 클래스에 달아주면 인메모리 DB를 사용하지 않고 실제 DB 에서 테스트하고 데이터를 확인 해볼 수 있다.

 

그 외 각종 DB 관련 테스트 어노테이션

@JooqTest

@DataMongoTest

@DataNeo4jTest

@DataRedisTest

...

 

 

 

 

 

@RestClientTest

REST Client를 테스트할 수 있다. Jackson, Gson 등을 자동 설정한다. MockRestServiceServer를 기본으로 사용할 수 있다. MockRestServiceServer으로 가상의 가짜 서버를 만들고 (호스트가 실제로 뜨는건 아니다. RestTemplate 을 생성할 때 테스트 코드시 이쪽으로 연결되도록 설정하는 것뿐인 듯.) request에 대한 return 정도를 할 수 있게 만들 수 있다. 

@RunWith(SpringRunner.class)
@RestClientTest(MyService.class)
public class RestClientTest {
	@Autowired
	private MyService myService;

	@Autowired
	private MockRestServiceServer mockServer;

	@Before
	public void setup(){
		mockServer
			.expect(requestTo("/greet/details"))
			.andRespond(withSuccess("hello", MediaType.TEXT_PLAIN));
	}

	@Test
	public void test() throws Exception {
		String greeting = myService.callRestService();
		assertThat(greeting).isEqualTo("hello");
	}
}

 

 

 

 

 

@AutoConfigureRestDocs

클라이언트 테스트 코드의 실행결과로 관련 문서를 자동으로 만들 수 있다.

RestDocumentationResultHandler를 같이 사용하면 메소드 이름을 기반으로 문서를 만들어줄 수 있다.

 

 

 

 

 

OutputCapture : JUnit 의 Rule. 테스트를 캡쳐해서 output으로 내놓는다. System.out.println 으로 작성된 아웃풋을 캡쳐하는데, System.out.println를 실제 코드에 들어가서 사용될 일이 없으므로 이거 쓰지말고 그냥 Logger 를 쓰자.