Spring Data JPA 의 reposcory 테스트
Spring Data JPA 의 reposcory 는 모두 인터페이스 인 데 어떻게 테스트 합 니까?
이 글 은 이 문제 에 대답 하고 우 리 는 선택
TodoRepository
중의 findBySearchTerm()
방법 을 예 로 들 었 다.maven 의존 가 져 오기
의존 하 는 pom 파일 은 다음 과 같 습 니 다:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.6.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.dbunit</groupId>
<artifactId>dbunit</artifactId>
<version>2.5.1</version>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.springtestdbunit</groupId>
<artifactId>spring-test-dbunit</artifactId>
<version>1.2.1</version>
<scope>test</scope>
</dependency>
통합 테스트 에 필요 한 환경 설정
구성 통합 테스트
절 차 는 다음 과 같다.
SpringJUnit4ClassRunner
을 통 해 테스트 를 실행 합 니 다. 이것 은 Spring Test 프레임 워 크 가 JUnit 에 대해 맞 춤 형 운행 기 입 니 다. @RunWith
를 통 해 설정 @ContextConfiguration
주 해 를 통 해 이 루어 집 니 다 DependencyInjectionTestExecutionListener
테스트 대상 에 의존 주입 제공 TransactionalTestExecutionListener
사무 지원 DbUnitTestExecutionListener
Spring Test DbUnit 에 포 함 된 특성 설정 후의 설정 클래스 는 다음 과 같 습 니 다:
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {PersistenceContext.class})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class})
public class ITFindBySearchTermTest {
}
자세 한 내용 은 각 종류의 자바 독 을 알 수 있 습 니 다.
다음은 Spring Data JPA 의 reposcory 에 테스트 를 쓸 수 있 습 니 다.
Spring Data JPA 의 reposcory 를 위 한 테스트 쓰기
절 차 는 다음 과 같다.
우선, 테스트 할 reposcory 를 주입 합 니 다. 코드 는 다음 과 같 습 니 다.
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {PersistenceContext.class})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class})
public class ITFindBySearchTermTest {
@Autowired
private TodoRepository repository;
}
그리고 테스트 데 이 터 를 초기 화하 기 위해 DbUnit 의 dataset 를 만 듭 니 다. XML 형식의 dataset 파일 을 사용 합 니 다. 파일 은 다음 과 같은 특징 을 가지 고 있 습 니 다.
<dataset>
<todos id="1" created_by_user="createdByUser" creation_time="2014-12-24 11:13:28" description="description" modified_by_user="modifiedByUser" modification_time="2014-12-25 11:13:28" title="title" version="0"/>
<todos id="2" created_by_user="createdByUser" creation_time="2014-12-24 11:13:28" description="tiscription" modified_by_user="modifiedByUser" modification_time="2014-12-25 11:13:28" title="Foo bar" version="0"/>
</dataset>
DbUnit 의 dataset 의 더 많은 형식 은 DbUnit dataset formats 를 보십시오.
그리고 테스트 를 작성 합 니 다. 절 차 는 다음 과 같 습 니 다.
@DatabaseSetup
방법 은 'iTl' 을 매개 변수 로 조회 할 때 대상 을 되 돌려 줍 니 다 findBySearchTerm()
방법 은 'iTl' 을 매개 변수 로 조회 할 때 id 가 1 인 대상 findBySearchTerm()
코드 는 다음 과 같다.import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {PersistenceContext.class})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class})
@DatabaseSetup("todo-entries.xml")
public class ITFindBySearchTermTest {
@Autowired
private TodoRepository repository;
@Test
public void findBySearchTerm_TitleOfFirstTodoEntryContainsGivenSearchTerm_ShouldReturnOneTodoEntry() {
List<Todo> searchResults = repository.findBySearchTerm("iTl");
assertThat(searchResults).hasSize(1);
}
@Test
public void findBySearchTerm_TitleOfFirstTodoEntryContainsGivenSearchTerm_ShouldReturnFirstTodoEntry() {
List<Todo> searchResults = repository.findBySearchTerm("iTl");
Todo found = searchResults.get(0);
assertThat(found.getId()).isEqualTo(1L);
}
}
ITFindBySearchTerm
주의해 야 할 두 가지 가 있다.@DatabaseSetup
주해 표를 클래스 에 표시 할 수 있 습 니 다. 그렇지 않 으 면 방법 확장 읽 기
총결산
요약:
@DatabaseSetup
통 해 통합 DbUnitTestExecutionListener
주해 P. S. 프로젝트 코드 는 Github (query methods, JPA Criteria API, Querydsl) 에서 가 져 올 수 있 습 니 다.
더 많은 Spring Data JPA tutorial 튜 토리 얼 을 방문 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.