본문 바로가기
개발공부 개발새발/JAVA

JpaRepository 를 사용하는 클래스를 테스트를 하고 싶어요!

by 휴일이 2023. 5. 31.

 

Spring Data JPA 를 사용하는 나

JpaRepository 사용을 하는데 이를 테스트 해보고 싶었다

 

 

package always.also.holiday.repository;

import always.also.holiday.domain.member.Member;
import always.also.holiday.domain.member.MemberJoinDto;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

@DataJpaTest
//인메모리 데이터베이스를 사용하도록 지정
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class MemberRepositoryTest {

@Autowired
public MemberRepository memberRepository;

@Test
void save() {

Member save = memberRepository.save(getMember());

Assertions.assertThat(save).isNotNull();
Assertions.assertThat(save.getUsername()).isEqualTo("username");

}

private static Member getMember() {
return new Member(new MemberJoinDto(
"username","password","name","nickname","address","postcode","detail","extra","email@email.com","mobile","code"
));
}
}

 

@DataJpaTest

- Jpa를 테스트하기위한 애노테이션.

안에 들어가보니

Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(DataJpaTestContextBootstrapper.class)
@ExtendWith(SpringExtension.class)
@OverrideAutoConfiguration(enabled = false)
@TypeExcludeFilters(DataJpaTypeExcludeFilter.class)
@Transactional
@AutoConfigureCache
@AutoConfigureDataJpa
@AutoConfigureTestDatabase
@AutoConfigureTestEntityManager
@ImportAutoConfiguration
public @interface DataJpaTest {

이런 게 붙어있는데 잘은 모르지만 대충 JPA 테스트를 위한 거구나 감이 온다

 

 

//인메모리 데이터베이스를 사용하도록 지정
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)

얘는 블로그에 인메모리 데이터베이스를 사용하도록 지정해주는 거라던데

뭔지 몰라서 챗gpt한테 물어봤음

 

 

 

 

한 마디로 테스트용 간이 데이터베이스라고 볼 수 있겠군

 

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ImportAutoConfiguration
@PropertyMapping("spring.test.database")
public @interface AutoConfigureTestDatabase {

그래서 이 친구한텐 테스트 db가 매핑되어있나봄!!

 

 

그리고 마지막으로

@Autowired
public MemberRepository memberRepository;

내가 만든 리포지토리를 오토와이어드로 주입해주면?

테스트 준비 끝!!

 

 

@Test
void save() {

Member save = memberRepository.save(getMember());

Assertions.assertThat(save).isNotNull();
Assertions.assertThat(save.getId()).isNotNull();
Assertions.assertThat(save.getUsername()).isEqualTo("username");

}

private Member getMember() {
return new Member(new MemberJoinDto(
"username","password","name","nickname","address","postcode","detail","extra","email@email.com","mobile","code"
));
}

memberRepository 에 있는 save 메서드를 테스트하기 위해

임의로 멤버 객체를 만든다.

 

만들어진 멤버 객체가 null이 아니고

자동으로 생성되는(DB에 들어가야만 오토로 생성되는 값) id값이 널이 아닌지 확인하며

해당 객체의 username이 내가 넣은 값인 "username"인지 확인한다 !

 

 

 

결과는?

 

 

테스트.성공적.

저 초록색 passed 를 볼 때마다 기부니가 좋당 ^___^/)

 

728x90