일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- EC2
- 추후정리
- 포트
- foreignkey
- 메세지수정
- 커밋메세지수정
- WeNews
- 메소드명
- appspec.yml
- ㅔㄴ션
- 2 > /dev/null
- 검색
- ubuntu
- MySQL
- querydsl
- 컨테이너실행
- 테스트메소드
- 네이티브쿼리
- application.yml
- appspec
- subquery
- 예약
- Query
- docker명령어
- 적용우선순위
- 테스트
- 참조키
- AuthenticationEntryPoint
- 서브쿼리
- 외부키
- Today
- Total
제뉴어리의 모든것
[Section3] [Spring MVC] 테스팅(Testing) - 3 (데이터 액세스 계층 테스트) 본문
아래의 내용들을 보기 전에
https://januaryman.tistory.com/458
위에 포스트를 봐두면 좋을것이다.
이번 시간은 데이터 액세스 (Repository) 계층만 테스트해보도록 하겠다.
해당 포스트는 공부용입니다.
잘못된 정보를 올리지 않으려고 노력하지만 간혹 존재할 수가 있고, 불필요한 내용이 존재하고 있을 수도 있습니다.
build.gradle
plugins {
id 'org.springframework.boot' version '2.7.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.codestates'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'com.google.code.gson:gson:2.9.0'
}
tasks.named('test') {
useJUnitPlatform()
}
데이터 액세스 계층을 테스트 하기 위한 한 가지 규칙
DB의 상태를 테스트 케이스 실행 이전으로 되돌려서 깨끗하게 만든다.
왜냐하면 각각의 테스트는 다른 테스트에 영향을 주어선 안된다.
이미 저장되고, 테스트시에 계속 쌓이는 데이터를 가지고 여러 테스트에서 사용하게 되면 테스트의 신뢰성이 떨어질 수 있기때문이다.
데이터 액세스 계층 테스트의 기본 구조
- 예제 코드
import com.codestates.member.entity.Member;
import com.codestates.member.repository.MemberRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import static org.junit.jupiter.api.Assertions.*;
@DataJpaTest // (1)
public class MemberRepositoryTest {
@Autowired
private MemberRepository memberRepository; // (2)
@Test
public void saveMemberTest() {
// given (3)
Member member = new Member();
member.setEmail("hgd@gmail.com");
member.setName("홍길동");
member.setPhone("010-1111-2222");
// when (4)
Member savedMember = memberRepository.save(member);
// then (5)
assertNotNull(savedMember); // (5-1)
assertTrue(member.getEmail().equals(savedMember.getEmail()));
assertTrue(member.getName().equals(savedMember.getName()));
assertTrue(member.getPhone().equals(savedMember.getPhone()));
}
}
(1) : JPA 의 기능을 테스트 하기 위한 테스트 환경을 만들어줌.그러므로, JpaRepository 들을 빈으로 등록해준다던가, @Entity 붙은 클래스들을 엔티티로써 인식 해준다던가,jpa의 repository 의 기능을 사용할 수 있게끔 세팅을 해준다고 생각하면된다. 그리고 참고로 @Transactional 애노테이션도 포함고 있으므로, 해당 테스트 클래스의 테스트 메소드들은 모두 트랜잭션 처리가 됬다고 생각하면된다.
참조 : https://velog.io/@ayoung0073/DataJpaTest
(2) :
빈으로 등록된 Repository를 필드 주입 받고 있다
(3) :
Entity 생성 과정이다.
(4) :
회원 정보 저장 부분이다.
(5) :
repository의 처리 결과에 대한 검증 부분이다.
@DataJpaTest 가 Import 해주는 자동 구성 기능들
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
org.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration
org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration
org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManagerAutoConfiguration
위에 내용들을 자동으로 Import 해주면서
앱에 존재하는 모든 빈을 스프링컨테이너에 등록하는것이 아닌, 데이터 액세스 계층에서 필요한 빈들만 등록해주는것이다.
'코드스테이츠 > 정리 블로깅' 카테고리의 다른 글
[Section3] [Spring MVC] 테스팅(Testing) - 4 (Mockito) Service 계층에 Mockito 이용 테스트 (0) | 2022.09.18 |
---|---|
[Section3] [Spring MVC] 테스팅(Testing) - 3 (Mockito) Service 계층을 끊은 Controller 테스트 (0) | 2022.09.17 |
[Section3] [Spring MVC] 테스팅(Testing) - 2 (API 계층 테스트) (0) | 2022.09.17 |
[Section3] [Spring MVC] 트랜잭션(Transaction) (0) | 2022.09.07 |
[Section3] [Spring MVC] JPA - 1 [추후 정리] (0) | 2022.09.03 |