inblog logo
|
jjack1
    JavaSpring Boot

    [SB] 9. 스프링부트 상점 v1 TEST

    최재원's avatar
    최재원
    Mar 24, 2025
    [SB] 9. 스프링부트 상점 v1 TEST
    Contents
    1. test파일 설정1-1. test폴더 안에 똑같은 폴더 이름을 생성하고 같은 이름에 ‘Test’를 붙여서 만든다1-2. repository 쿼리 코드를 테스트2. 본래의 LogRepository로 쿼리 메서드 작성3. 쿼리 테스트 코드 실행4. DTO로 맵핑 테스트 진행4-1. 쿼리의 컬럼값에 맞는 타입의 오브젝트를 생성4-2. 생성한 오브젝트에 쿼리 데이터를 맵핑4-3. 맵핑 코드 테스트
    6. cursor에서 java 유닛 테스트 세팅

    1. test파일 설정

    1-1. test폴더 안에 똑같은 폴더 이름을 생성하고 같은 이름에 ‘Test’를 붙여서 만든다

    notion image

    1-2. repository 쿼리 코드를 테스트

    package com.metacoding.storev1.log; import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.context.annotation.Import; @Import(LogRepository.class) // LogRepository를 IoC에 등록 @DataJpaTest // em을 IoC 등록 public class LogRepositoryTest { @Autowired // IoC에 있는 것을 DI 한것임 private LogRepository logRepository; @Test // 실행할 수 있는 세모버튼 생성 public void findAllJoinStore_test() { // 매개변수에 아무것도 적을 수 없다. logRepository.findAllJoinStore(); } }
    약속
    1. 클래스명은 테스트할 클래스명 뒤에 Test를 붙인다
    1. 메서드명은 테스트할 메서드명 뒤에 _test를 붙인다
    준비사항
    • EntityManager → 쿼리를 위한 객체
    • LogRepository → 실제 본체
    1. @DataJpaTest → 이 어노테이션을 넣으면 EntityManager 를 IoC 컨테이너에 등록
    1. @Import(LogRepository.class) →LogRepository 를 IoC 컨테이너에 등록
    1. LogRepository 이 본체의 메서드를 실행하고 결과 값을 확인

    2. 본래의 LogRepository로 쿼리 메서드 작성

    package com.metacoding.storev1.log; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Repository; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; @Repository public class LogRepository { private EntityManager em; public LogRepository(EntityManager em) { this.em = em; } public void findAllJoinStore() { String q = "SELECT lt.id, st.name, lt.qty, lt.total_price, lt.buyer FROM LOG_TB lt INNER JOIN STORE_TB st ON lt.store_id = st.id"; Query query = em.createNativeQuery(q); List<Object[]> obsList = (List<Object[]>) query.getResultList(); // Object[] = Row for (Object[] obs : obsList) { System.out.println(obs[0] + ","); System.out.println(obs[1] + ","); System.out.println(obs[2] + ","); System.out.println(obs[3] + ","); System.out.println(obs[4]); System.out.println("================================="); } } }

    3. 쿼리 테스트 코드 실행

    notion image
    notion image

    4. DTO로 맵핑 테스트 진행

    4-1. 쿼리의 컬럼값에 맞는 타입의 오브젝트를 생성

    package com.metacoding.storev1.log; import lombok.Data; // DTO : Data Transfer Object -> 화면에 필요한 데이터만 있는 오브젝트 public class LogResponse { @Data // getter, setter, toString public static class ListPage { private int id; private String name; private int qty; private int totalPrice; private String buyer; public ListPage(int id, String name, int qty, int totalPrice, String buyer) { this.id = id; this.name = name; this.qty = qty; this.totalPrice = totalPrice; this.buyer = buyer; } } }

    4-2. 생성한 오브젝트에 쿼리 데이터를 맵핑

    package com.metacoding.storev1.log; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Repository; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; @Repository public class LogRepository { private EntityManager em; public LogRepository(EntityManager em) { this.em = em; } public List<LogResponse.ListPage> findAllJoinStore() { List<LogResponse.ListPage> logList = new ArrayList<>(); String q = "SELECT lt.id, st.name, lt.qty, lt.total_price, lt.buyer FROM log_tb lt INNER JOIN store_tb st ON lt.store_id = st.id ORDER BY lt.id DESC"; Query query = em.createNativeQuery(q); List<Object[]> obsList = (List<Object[]>) query.getResultList(); // Object[] -> ROW // ObjectMapping for (Object[] obs : obsList) { LogResponse.ListPage log = new LogResponse.ListPage( (int) obs[0], (String) obs[1], (int) obs[2], (int) obs[3], (String) obs[4]); logList.add(log); } return logList; } }
    ArrayList() 를 하나 만들고 타입을 아까 만든 클래스 타입으로 함
    쿼리의 결과를 만들어둔 클래스 타입에 맵핑함

    4-3. 맵핑 코드 테스트

    package com.metacoding.storev1.log; import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.context.annotation.Import; import com.metacoding.storev1.log.LogResponse.ListPage; @Import(LogRepository.class) // LogRepository를 IoC에 등록 @DataJpaTest // em을 IoC 등록 public class LogRepositoryTest { @Autowired // IoC에 있는 것을 DI 한것임 private LogRepository logRepository; @Test // 실행할 수 있는 세모버튼 생성 public void findAllJoinStore_test() { // 매개변수에 아무것도 적을 수 없다. List<LogResponse.ListPage> logList = logRepository.findAllJoinStore(); for (ListPage listPage : logList) { System.out.println(listPage); } } }
    notion image
     
    Share article
    Contents
    1. test파일 설정1-1. test폴더 안에 똑같은 폴더 이름을 생성하고 같은 이름에 ‘Test’를 붙여서 만든다1-2. repository 쿼리 코드를 테스트2. 본래의 LogRepository로 쿼리 메서드 작성3. 쿼리 테스트 코드 실행4. DTO로 맵핑 테스트 진행4-1. 쿼리의 컬럼값에 맞는 타입의 오브젝트를 생성4-2. 생성한 오브젝트에 쿼리 데이터를 맵핑4-3. 맵핑 코드 테스트

    jjack1

    RSS·Powered by Inblog