[Spring] Repository 단위 테스트

maxxyoung·2022년 10월 27일
0

Repository

@RequiredArgsConstructor
@Repository
public class MemberRepository implements MemberDao {

    private final EntityManager em;

    @Override
    public void findMember(Member member) {
        em.persist(member);
    }
    
    ...
}

Repository Test Code

@SpringBootTest
@Transactional(readOnly = true)
class MemberRepositoryTest {

    @Autowired
    private MemberRepository memberRepository;

    @Test
    @Transactional
    public void 멤버등록() throws Exception{
        //given
        Member member = new Member("M123456789", "choi1234", "maxx","1234");

        //when
        memberRepository.saveMember(member);

        //then
        Assertions.assertThat(member).isEqualTo(memberRepository.findMemberByID("choi1234").get());

    }
    
 	...
}

@DataJpaTest

JPA를 사용할 경우 @DataJpaTest Annotation을 쓸 수 있음
DB와의 연결을 직접 확인하는 것이 의미 있는 일이므로 Mock을 쓰지 않고 진짜 연결을 테스트

  • JPA 컴포넌트들을 테스트하는 것에 초점이 맞춰져 있음
  • application context의 모든 자동 설정들을 수행하지 않고 오직 JPA와 관련된 요소들만 읽고 테스트함
  • 기본적으로 @Entity, @Repository를 스캔함

그런데
나의 경우에는 @DataJpaTest을 쓰고 @Autowired에서 MemberRepository의 bean을 찾을 수 없다는 오류가 나왔다.

이유는
나의 MemberRepository가 Spring Data JPA Repository가 아니여서 bean으로 스캔이 안된 것 이였다.
테스트를 하기 위한 방법은 2가지

  • Spring Data JPA Repository로 만들기 (@DataJpaTest 사용 가능)
  • @SpringBootTest로 테스트하기 (상단의 코드)
profile
오직 나만을 위한 글. 틀린 부분 말씀해 주시면 감사드립니다.

0개의 댓글