에브리타임 클론 코딩 프로젝트 정리 - Test

yshjft·2022년 7월 11일
0

@MockBean(JpaMetamodelMappingContext.class)

WebMvcTest 시 JPA auditing을 사용하고 있다면 @MockBean(JpaMetamodelMappingContext.class) 사용해주어야 한다.

테스트 환경에서 bean 추가하기

아래와 같이 클래스에서 static class를 만들어 사용하는 방법이 있다. 단 이렇게 하는 경우 @Nested가 적용된 부분은 등록된 Bean을 인식하지 못한다.

@DataJpaTest
class TimetableRepositoryTest {
  @TestConfiguration
  static class TestConfig {
    @Bean
    JPAQueryFactory jpaQueryFactory(EntityManager em) {
      return new JPAQueryFactory(em);
    }
  }

  …
}

다른 방법도 있다. 아래와 같이 테스트용 Bean을 만드는 클래스를 따로 만들고 사용할 곳에 @Import(TestConfig.class)를 적용하면 된다.

@TestConfiguration
public class TestConfig {

  @PersistenceContext

  EntityManager entityManager;

  @Bean
  public JPAQueryFactory jpaQueryFactory() {
    return new JPAQueryFactory(entityManager);
  }

}
@DataJpaTest
@Import(TestConfig.class)
class Test { … }

보통 이러한 방식들은 모든 Bean을 container에 올리는 @SpringBootTest 보다는 @DataJpaTest와 같이 특정 영역과 관련된 일부 Bean만 올리는 상황에서 필요한 Bean을 추가적으로 등록하기 위해 사용된다.

Test와 DB

@SpringBootTest

  • 설정 파일(application.yml, application-test.yml)에서 입력한 실제 DB를 사용하여 테스트를 진행한다.
  • @ActiveProfiles(“특정 프로파일 이름”)
    테스트에 특정 프로파일을 적용시키기 위해 사용한다.
  • 테스트 환경에서 설정 파일을 적용할 때 test/resources에 있는 설정 파일들이 우선권을 가지게 된다.
    • 기본 프로파일
      • /test/resources/application.yml/main/resources/application.yml
    • test 프로파일
      • @ActiveProfiles(“test”)
      • /test/resources/application-test.yml/main/resources/application-test.yml

@DataJpaTest

  • 인메모리 DB를 사용하여 테스트를 진행한다.
profile
꾸준히 나아가자 🐢

0개의 댓글