스프링/테스트

H2 DB로 테스트 수행 시 문제점 스프링으로 웹개발을 하고 테스트를 작성하고 있다면 H2 데이터베이스를 많이 사용한다. H2는 인메모리 데이터베이스로 스프링부트에 내장되어 있어 별도의 DB 설정 없이 간편하게 이용할 수 있다. 깃허브에서 프로젝트를 클론한 사람 모두가 테스트를 아무런 환경 세팅 없이 쉽게 돌릴 수 있고 테스트 속도도 빠르기에 개발 초기 단계나 토이 프로젝트에서 많이 사용하고 있다. 하지만 운영 환경에서는 MySQL 같은 데이터베이스를 사용하기 때문에 운영 환경과 다른 환경에서 테스트를 한다는 불안감이 있다. 실제로 환경적인 측면에나 문법적인 측면에서 다른 부분이 있어 테스트는 돌아가더라도 운영 환경에서 장애가 날 수도 있다. Transactional(readOnly = true) 문제 ..
스프링부트 애플리케이션 테스트를 할 때 @Mock과 @MockBean을 사용할 때가 있다. 두 어노테이션 모두 모의 객체를 만들지만 용도가 조금씩 다르다. 간단하게 설명하면 비즈니스 로직을 단위 테스트할 때 @Mock을 사용한다. 애플리케이션 컨텍스트를 기반으로 하는 통합 테스트에서 빈을 모의 객체로 추가하거나 변경하는 경우에 @MockBean을 사용한다. Using @Mock For Spring Boot Unit Tests StockService라는 객체가 StockApiClient를 의존한다고 하자. 위 객체를 독립적으로 테스트하기 위해선 Junit과 Mockito가 필요하다. StockService를 테스트할 때 의존 객체들을 mock으로 대체했다. @InjectMock이 붙은 객체에 @Mock 어..
@SpringBootTest가 붙으면 Application Context에 의존성 주입 오류(NoSuchBeanDefinitionException) 없이 테스트에 필요한 모든 의존성을 제공해준다. 여러 객체들을 빈으로 등록해서 전체적인 통합 테스트를 진행할 때 사용할 수 있다. @SpringBootTest 내부 확인 맨 아래부터 보면 Junit Jupitier(Junit5의 일부)의 SpringExtension을 등록한 것을 볼 수 있다. SpringExtention은 Spring TestContext 프레임워크를 Junit5의 Jupiter 프로그래밍 모델에 통합한다. 이 extension은 테스트 프레임워크와 스프링의 원활한 통합을 위해 필수적이다. @BootstrapWith는 Sprint TestC..
더즈
'스프링/테스트' 카테고리의 글 목록