Spring

Repository Layer의 단위테스트 작성

dodop 2022. 3. 11. 17:19

 

 

비지니스 로직은 도메인 계층에서 발생하고, 엔티티의 영속화 요구는 서비스 계층에서 발생하기 때문에 Repository의 단독 테스트를 진행하기 위해서는 Service 계층과의 관계를 끊어야 한다.

SpringBoot에서는 @DataJpaTest 어노테이션을 통해서 JPA컴포넌트와 관련된 Repository의 단위테스트가 가능하도록 해준다. 

 

 

 

 

@DataJpaTest

DataJpaTest 어노테이션은 JPA와 관련된 설정만을 로드하여 @Entity 어노테이션이 붙은 클래스를 스캔하여 저장소를 구성한다. 트랜잭션을 기본적으로 내장하고 있어 테스트 코드가 종료되면 자동으로 롤백이 이루어진다. 

 

 

 

 

테스트 코드 
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class UserActivityRepositoryTests {

    @Autowired
    private UserActivityRepository userActivityRepository;

    @Test
    @DisplayName("주어진 정보대로 사용자 액티비티를 생성한다.")
    public void create_user_activity() {
        //given

        //when
        UserActivity createdUserActivity = userActivityRepository.save(userActivity);

        //then
	assertThat(createdUserActivity.getId()).isNotNull()   
    }
}
  • @RunWith(SpringRunner.class) : @SpringBootTest를 사용하면 application context를 전부 로딩하기 때문에 무거워진다. 해당 어노테이션을 사용하면 Junit4에서 @Autowired, @MockBean에 해당하는 컨텍스트만 로딩하여 테스트를 진행하게 된다. (SpringJUnit4ClassRunner)
  • @AutoConfigureTestDatabase : 설정의 기본값은 Replace.Any로 기본적으로 내장된 임베디드 데이터베이스를 사용하게된다. (인메모리 설정, h2 데이터베이스 사용됨) Replace.NONE으로 설정하면 우리가 사용하고자하는 데이터베이스가 사용이 된다. ( MySQL을 사용하기 때문에 해당 어노테이션을 사용했다. )

 

위와 같이 테스트 할 대상 레파지토리를 @Autowired 어노테이션을 통해서 빈으로 주입받고 주입받은 대상을 이용하여 테스트를 진행한다. 

 

 

 

 

 

 

 

 

( 참고한 사이트 )

https://jiminidaddy.github.io/dev/2021/05/20/dev-spring-%EB%8B%A8%EC%9C%84%ED%85%8C%EC%8A%A4%ED%8A%B8-Repository/

 

SpringBoot Service/Repository 단위 테스트

SpringBoot Service와 Repository의 단위 테스트 방법

jiminidaddy.github.io

https://www.bezkoder.com/spring-boot-unit-test-jpa-repo-datajpatest/

 

@DataJpaTest example for Spring Data Repository Unit Test - BezKoder

Nowadays Unit Test is so important in Software Development, and Spring Framework also provides @DataJpaTest annotation to make writing test for JPA Repository more simpler. In this tutorial, we’re gonna look at how to apply @DataJpaTest in our Spring Boo

www.bezkoder.com

https://ssons.tistory.com/63?category=959869