Spring Data JPA 테스트 코드 작성하기

박지운·2023년 2월 14일
0

'스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 읽고 공부하며 정리한 내용입니다. 오류 해결부분은 틀린 내용이 있을 수 있습니다.😂

JpaRepository 생성

public interface PostsRepository extends JpaRepository<Posts, Long> {
}

MyBatis 등에서는 Dao라고 불리는 DB Layer접근자, 인터페이스로 생성한다.
상속을 JpaRepository<Entity클래스, PK타입> 으로 받으면 기본 CRUD 메소드가 자동 생성된다.

❗ Entity클래스와 기본Entity Repository는 꼭 함께 위치해야한다


테스트 코드 작성하기

@RunWith(SpringRunner.class)
@SpringBootTest
public class PostRepositoryTest {
    
    @Autowired
    PostsRepository postsRepository;
    
    @After
    public void cleanup() {
        postsRepository.deleteAll();
    }
    
    @Test
    public void 게시글저장_불러오기() {
        String title = "테스트 게시글";
        String content = "테스트 본문";
        
        postsRepository.save(Posts.builder()
                .title(title)
                .content(content)
                .author("gourderased@gmail.com")
                .build());
    }
}
  • postsRepository.save : 테이블 posts에 insert/update쿼리를 실행
    id 값이 있다면 update, 없다면 insert쿼리 실행
  • postsRepository.findAll : 테이블 posts에 있는 모든 데이터를 조회
  • 별다른 설정없이 @SpringBootTest를 사용할 경우 H2 데이터베이스를 실행

어노테이션

@After : Junit에서 단위 끝날 때마다 수행되는 메소드 지정
배포 전 전체 테스트를 하기 전 테스트간 데이터 침범을 막기 위해 사용
여러 테스트가 동시에 수행되면 H2에 데이터가 남아 다음 테스트가 실패할 수 있음

오류 해결

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

패키지 위치가 원본 소스와 맞지 않아서 발생했다. 원본 소스가 src/main/com에 위치하면 테스트 소스도 src/test/com에 위치해야한다.

참고 : https://nocount.tistory.com/208


버전 변경

테스트 코드 작성중 계속 오류가 생겨서 확인해보니 저자분께서 버전된 변경에 맞춰서 블로그에 수정 코드를 올려주신게 있었다. 프레임워크 버전에 따른 차이를 크게 체감했다.
블로그에 있는 버전으로 맞추고 진행해야 책 뒤 내용을 편하게 공부할 수 있을 것 같다.

https://jojoldu.tistory.com/539

profile
앞길막막 전과생

0개의 댓글