[JUnit] 테스트 코드 연습해보기

chrkb1569·2023년 1월 19일
0

JUnit5

목록 보기
1/6

기존에 하고 있던 알고리즘 공부가 얼추 마무리 되고 있어서, 아마 1월 말부터 기존에 공부하려고 했었던 JPA, Docker, 테스트 코드에 대해서 공부할 것 같습니다.

일단 오늘은 미루고 미뤘던 테스트 코드에 대해서 알아보고 실습해보는 시간을 가지겠습니다.

일단은 테스트 코드 공부는 youtube에 메타 코딩이라는 분의 강의 시리즈를 보면서 공부할 것 같습니다.


메타코딩 JUnit 강의


일단 프로젝트를 생성해줍니다.

라이브러리의 경우, Lombok, JPA, MySQL Driver, Spring Web을 추가해주었습니다.

다음으로는 테스트하기 위한 Controller, Service, Repository 파일을 만들어줍니다.

강의에서는 Entity를 Book으로 설정하였기 때문에 Book과 관련된 Controller, Service, Repository 파일들을 만들어 준 뒤에, Test 파일 또한 만들어줍니다.

일단 파일들은 모두 만들었으니, 테스트하기 위한 Entity를 만들어줍니다.

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 50)
    private String title; // 책 제목

    @Lob
    @Column(nullable = false)
    private String content; // 책 내용

    @Column(nullable = false, length = 10)
    private String author; // 책 작가
}

테스트가 목적이므로, 간단하게 Entity를 만들어줍니다.

실행하였을 때, 쿼리문이 잘 들어가는 것을 보니 오류없이 잘 작동하는 것 같습니다.

데이터 베이스에도 잘 적용된 모습을 확인할 수 있었습니다.

그럼 Entity도 잘 만들었으니, 테스트를 해볼텐데, 일단은 가장 간단한 Repository부터 테스트 해보겠습니다.

테스트를 수행하는 방식 중에서 SpringBootTest를 사용하는 방식이 있지만, 해당 방식은 전체적인 application을 띄워서 하는 방식이기 때문에, 전체적으로 Bean을 생성하기 때문에 무겁다고 생각하여 @ExtendWith 어노테이션을 사용할 예정입니다.
해당 어노테이션을 사용할 경우, 테스트와 관련된 확장 기능들을 제공하며, Spring Boot와 JUnit을 연결해주는 역할을 수행한다고합니다.
동일한 기능을 수행하는 @RunWith 어노테이션도 존재하지만, 해당 방식은 JUnit4에서만 지원하고 5에서는 지원하지 않기때문에 사용할 수 없습니다.

@RunWith 어노테이션을 사용할 경우에는 SpringRunner.class를 사용하지만, @ExtendWith 어노테이션을 사용할 경우에는 SpringExtension.class를 사용한다고합니다.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@DataJpaTest
@ExtendWith(SpringExtension.class)
public class BookRepositoryTest {

    @Autowired
    private BookRepository bookRepository;

    @Test
    public void saveTest() {
        System.out.println("test Implement");
    }
}

원래는 여기서 더 이어가려고 하였으나.. 현재 JUnit을 통하여 테스트 코드를 돌려보았더니 다음과 같은 오류가 발생하였습니다...ㅠ

일단 오류가 해결되는대로 다시 돌아오겠습니다.. 감사합니다.


Reference
https://webcoding-start.tistory.com/20
https://gogo-jjm.tistory.com/9

0개의 댓글