Spring Jpa를 사용하며 JpaRepository는 테스트 코드를 어떻게 작성해줘야하나에 대한 고민이 있었다.
어떻게 해줘야하는지 감이 안왔는데 한 유튜브 강의에서 쉽게 설명해주셔서
정리해보려고 한다.
참조 : https://www.youtube.com/watch?v=GVqpIUkEWaY
우선 Spring initializer로 프로젝트를 생성해본다
의존성 추가는 다음과 같았다

H2는 인메모리 데이터베이스로
따로 설정을 건드려 주지 않아도 의존성만 추가해준다면
별도의 데이터베이스 서버가 없어도 동작한다
H2에 대해서는 추후에 자세히 정리해보도록 하겠다
아무튼 DB와 연결되는 부분의 테스트코드를 작성하기 위해선
이 H2를 많이들 사용하는것 같다
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
보통 scope가 runtime으로 되어있는데
저런식으로 test로 scope를 바꿔준다면
H2가 테스트시에만 동작하게 된다
3개를 만들어 테스트를 해보았다
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;
}
}
package com.example.jpatestcode;
import com.example.jpatestcode.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
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한걸 꺼내오는것도 잘 되었다

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