Spring JPA - JpaRepository 테스트 코드 작성하는법. ( 작성중)

상우·2024년 12월 19일

상황

Spring Jpa를 사용하며 JpaRepository는 테스트 코드를 어떻게 작성해줘야하나에 대한 고민이 있었다.
어떻게 해줘야하는지 감이 안왔는데 한 유튜브 강의에서 쉽게 설명해주셔서
정리해보려고 한다.

참조 : https://www.youtube.com/watch?v=GVqpIUkEWaY

방법

1. 프로젝트 생성

우선 Spring initializer로 프로젝트를 생성해본다
의존성 추가는 다음과 같았다

  • lombok
  • Spring Jpa
  • H2

H2는 인메모리 데이터베이스로
따로 설정을 건드려 주지 않아도 의존성만 추가해준다면
별도의 데이터베이스 서버가 없어도 동작한다
H2에 대해서는 추후에 자세히 정리해보도록 하겠다
아무튼 DB와 연결되는 부분의 테스트코드를 작성하기 위해선
이 H2를 많이들 사용하는것 같다

2. H2 Scope 설정

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>test</scope>
</dependency>

보통 scope가 runtime으로 되어있는데
저런식으로 test로 scope를 바꿔준다면
H2가 테스트시에만 동작하게 된다

3. 테스트를 위한 클래스 만들기

  • User
  • UserRepository
  • UserRepositoryTest

3개를 만들어 테스트를 해보았다

User

package com.example.jpatestcode.domain;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name = "users")
public class User {

    @Id
    private Long id;

    private String name;

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString(){
        return "id: "  +id + ", name: " + name;
    }
}

UserRepository

package com.example.jpatestcode;

import com.example.jpatestcode.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    
}

UserRepositoryTest

package com.example.jpatestcode;

import com.example.jpatestcode.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;


@DataJpaTest
class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void name() {

        User user1 = new User();
        user1.setId(1L);
        user1.setName("팡팡1");

        userRepository.save(user1);

        System.out.println(userRepository.findById(1L).get());


    }
}

엔티티와 리포지토리를 만들어주고
테스트클래스를 만들어
@DataJpaTest 어노테이션을 붙여주고
테스트를 진행하니
save도 , save한걸 꺼내오는것도 잘 되었다

생각보다 간단해서 놀랐다.

profile
엉성해도 우직하게

0개의 댓글