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

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();
}
}
약속
- 클래스명은 테스트할 클래스명 뒤에 Test를 붙인다
- 메서드명은 테스트할 메서드명 뒤에 _test를 붙인다
준비사항
EntityManager
→ 쿼리를 위한 객체
LogRepository
→ 실제 본체
@DataJpaTest
→ 이 어노테이션을 넣으면EntityManager
를 IoC 컨테이너에 등록
@Import(LogRepository.class)
→LogRepository
를 IoC 컨테이너에 등록
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. 쿼리 테스트 코드 실행


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);
}
}
}

Share article