이 글은 향로님의 [스프링부트로 웹 서비스 출시하기]를 참고하며 프로젝트를 만들며 정리한 글입니다.
👉 기본 환경
- Language: Java
- DB: MySQL
- IDE: IntelliJ
해당 포스팅에서는 Repository를 Spring Data JPA를 사용하여, JPARepository를 상속받아서 구현하였지만,JPA 기본 강의에서 배운 EntityManager를 활용해보고자 변경하여 진행하였습니다.
🙂 김영한의 [자바 ORM 표준 JPA 프로그래밍 - 기본편]
PostRepositoryTest.java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package com.project.mini1.domain.posts;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@SpringBootTest
public class PostRepositoryTest {
@Autowired
PostRepository postRepository;
@Test
@Transactional
public void 게시글_저장() throws Exception {
// given
// 테스트 기반 환경을 구축하는 단계
Posts post = Posts.builder()
.title("테스트 제목")
.content("테스트 본문")
.author("테스트 저자")
.build();
// when
// 테스트 하고자 하는 행위 선언
Long saveId = postRepository.save(post);
Posts findPost = postRepository.findOne(saveId);
// then
// 테스트 결과 검증
assertThat(findPost.getId()).isEqualTo(post.getId());
// findOne id의 return 값 = save id의 return 값과 같은가
assertThat(findPost).isEqualTo(post);
System.out.println("findPost == post: " + (findPost == post));
}
}
|
@SpringBootTest
- 스프링과 관련되어 통합테스트를 진행할 때 사용(특히 DB와 연동되어 처리 할 경우 사용)
@RunWith(SpringRunner.class)
- Springboot 3.x대 사용
- 기본 설정 : JUnit5(Spring Web Dependency 사용 시, 자동으로 추가)
- @ExtendWith(SpringExtension.class)로 대체 됨(생략 가능)
* JUnit: 자바 프로그래밍 언어용 단위 테스트 프레임워크
@Test
- 테스트 메서드임을 선언
@Transactional
- 해당 범위 내 메서드가 트랜잭션이 되도록 보장, 선언적 트랜잭션
Test Code 작성법
1. given
- 테스트 기반 환경 구축
- Builder로 인스턴스 생성 후, 변수 선언(추후, 검증 시 활용)
2. when
- 테스트하고자 하는 행위 선언
- Spring Data JPA를 사용하면 JPARepository를 상속받기 때문에 기본 메서드는 따로 구현하지 않아도 되지만, EntityManger를 사용할 경우, Repository에서 테스트하고자 할 메서드 구현 필수
3. then
- 테스트 결과 검증
- assertThat
- 모든 테스트 코드는 asssertThat() 메서드에서 출발
- AssertJ에서 제공하는 다양한 메서드를 연쇄 호출하며 코드를 작성
🤓 추가
JUnit5에는 @After, @Before 대신 @AfterEach, @BeforeEach 사용
- 테스트 실행 전후로 작업을 추가하여 테스트 단위별로 독립성을 높일 수 있음
- Test code는 기본적으로 수행 후 자동으로 rollback 진행하므로 cleanup() 작성 X
🔗 소스 코드
📚 참고 자료
'PlayGround > AWS 연습' 카테고리의 다른 글
[Project] mini1 - 애플리케이션 실행 전 스크립트 작성 (0) | 2023.10.06 |
---|---|
[Project] mini1 - Ajax DB 통신과 fail 처리 (1) | 2023.10.04 |
[Project] mini1 - View 구현을 위한 JSP 설정 (1) | 2023.10.03 |
[Project] mini1 - Postman 활용 (0) | 2023.10.01 |
[Project] mini1 - MySQL, JPA 연동 (0) | 2023.09.30 |