스프링 통합 테스트
➡️ 스프링 컨테이너와 DB까지 연결한 통합 테스트
🔸@SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행
🔸@Transactional : 테스트 케이스에 사용하면 테스트 시작 전에 트랜잭션 시작 > 완료 후 항상 롤백 >> DB에 데이터가 남지 않아 다음 테스트 계속 반복 가능 (중복 예외에 걸리지 않음)


➡️ 단위 테스트 : MemberServiceTest와 같이 자바 코드만으로 최소한의 단위로 테스트 하는 것
🔸테스트가 가볍고(빠르고) 단위별로 쪼개어 테스트하기 때문에 테스트의 질이 더 좋을 가능성이 높음
스프링 JdbcTemplate
➡️ 순수 Jdbc와 동일한 dependencies
➡️ 스프링 JdbcTemplate, MyBatis와 같은 라이브러리는 JDBC API에서 한 반복 코드를 대부분 제거 / SQL은 직접 작성
➡️ 순수 JDBC 코드에 비해 매우 간결해짐
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
public class JdbcTemplateMemberRepository implements MemberRepository{
private final JdbcTemplate jdbcTemplate;
// @Autowired 생성자가 하나면 Autowired 생략 가능
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public Member save(Member member) {
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", member.getName());
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
member.setId(key.longValue());
return member;
}
@Override
public Optional<Member> findById(Long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member", memberRowMapper());
}
private RowMapper<Member> memberRowMapper(){
return new RowMapper<Member>() {
@Override
public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
};
}
}

➡️ JdbcTemplateMemberRepository가 잘 작동되는지는 만들어놓은 Jdbc 통합 테스트 돌려보면 간단하게 확인 가능
'프로그래밍 > - Spring' 카테고리의 다른 글
| [ 스프링 DB 접근 기술 ] 스프링 데이터 JPA (0) | 2025.02.13 |
|---|---|
| [ 스프링 DB 접근 기술 ] JPA (0) | 2025.02.12 |
| [ 스프링 DB 접근 기술 ] H2 데이터베이스 설치 / 순수JDBC (0) | 2025.02.06 |
| [ 회원 관리 예제 - 웹 MVC 개발 ] 회원 웹기능 - 홈 화면 추가 / 등록 / 조회 (1) | 2025.02.04 |
| [ 스프링 빈과 의존관계 ] 컴포넌트 스캔과 자동 의존관계 설정 / 자바 코드로 직접 스프링 빈 등록하기 (1) | 2025.01.24 |