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"
));
}
}
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 {
@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)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
얘는 블로그에 인메모리 데이터베이스를 사용하도록 지정해주는 거라던데
뭔지 몰라서 챗gpt한테 물어봤음
한 마디로 테스트용 간이 데이터베이스라고 볼 수 있겠군
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ImportAutoConfiguration
@PropertyMapping("spring.test.database")
public @interface AutoConfigureTestDatabase {
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ImportAutoConfiguration
@PropertyMapping("spring.test.database")
public @interface AutoConfigureTestDatabase {
그래서 이 친구한텐 테스트 db가 매핑되어있나봄!!
그리고 마지막으로
@Autowired
public MemberRepository memberRepository;
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"
));
}
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
'개발공부 개발새발 > JAVA' 카테고리의 다른 글
Junit5 Test ) Controller 를 테스트 해보자! (0) | 2023.07.01 |
---|---|
Junit5 Test ) Service 를 테스트 해보자! (0) | 2023.07.01 |
Dto를 파라미터로 받았을 때, 엔티티는 어느 계층에서 변환해야 좋을까? +) 바뀐 의견 추가 (0) | 2023.05.06 |
QueryDsl 의존성(Gradle) 세팅 (0) | 2023.03.11 |
뷰에서 컨트롤러에 데이터를 전송하는 방식은? (0) | 2022.12.29 |