본문 바로가기
Spring

Spring 단위테스트 -2 Data

by 스르나 2021. 2. 28.

이번에는 단위테스트에서 Database에 접근하는 클래스를 테스트하는 방법을 보자.

 

우선 테스트를 알아보기전에 테스트할 코드를 만들어보자.

 

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

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

우선 내장 데이터베이스를 이용하기 위해 h2와 데이터베이스 프로그래밍을 위해 jpa를 가져오자.

 

CREATE TABLE user (
    id VARCHAR(45) NOT NULL,
    password VARCHAR(45) NULL,
    name VARCHAR(45) NULL,
    PRIMARY KEY (id));

그다음은 간단하게 테이블을 하나 추가한다.

 

import javax.persistence.Entity;
import javax.persistence.Id;

@Getter
@Setter
@Entity(name = "User")
public class User {

    @Id
    private String id;

    private String password;

    private String name;
}

만든 테이블에 맞춰 jpa 저장소를 생성한다.

 

public interface UserRepository extends JpaRepository<User,String> {
    User getUserById(String id);
}

마지막으로 위처럼 jpa repository를 만들어주자.

 

 

이제 테스트 코드를 만들어보자.

 

우선 Data Jpa테스트에서 사용할 3가지 어노테이션을 봐야한다.

 

1. @DataJpaTest

이 어노테이션은 앱내의 @Entity가 붙은 Jpa저장소만을 가져온다. 추가적으로 @Transactional 어노테이션이 내장되어있기 때문에 따로 명시할 필요가 없다.

 

2. @Transactional(propagation = Propagation.NOT_SUPPORTED)

Transactional기능이 필요없다면 위처럼 붙이면 된다.

 

3. @AutoConfigureTestDatabase.Replace.NONE)

내장 데이터베이스가 아닌 실제 데이터베이스에 테스트를 원할 경우 붙이면된다.

 

@DataJpaTest
class JpaTest {

    @Autowired
    UserRepository userRepository;

    @Test
    void saveTest(){
        User user=new User();
        user.setId("test");
        user.setPassword("123");
        user.setName("testName");

        then(userRepository.save(user)).isNotNull();
        then(userRepository.getUserById(user.getId()).getId()).isEqualTo(user.getId());
    }
}

테스트는 위와 같이 진행하면 된다. 필요한 어노테이션을 붙이고, 테스트할 Repository를 가져와서 실행한다.

'Spring' 카테고리의 다른 글

@WebMvcTest  (0) 2021.07.01
Spring Lifecycle Callback  (0) 2021.03.20
Spring 단위테스트 - 1  (0) 2021.02.28
InMemory-H2  (0) 2021.02.23
스프링 HttpMessageConverters  (0) 2021.01.27