이 글은 향로님의 [스프링부트로 웹 서비스 출시하기]를 참고하며 프로젝트를 만들며 정리한 글입니다.
2) 스프링부트로 웹 서비스 출시하기 - 2. SpringBoot & JPA로 간단 API 만들기
이번 시간엔 SpringBoot & JPA로 간단한 API를 만들 예정입니다. Tip) 아직 SI 환경에선 Spring & MyBatis 를 많이 사용하지만, 쿠팡/우아한형제들/NHN Entertainment 등 자사 서비스를 개발하는 곳에선 SpringBoot & J
jojoldu.tistory.com
👉 기본 환경
- 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
🔗 소스 코드
GitHub - HJ0216/mini1: SpringBoot+JPA Board Mini Project
SpringBoot+JPA Board Mini Project. Contribute to HJ0216/mini1 development by creating an account on GitHub.
github.com
📚 참고 자료
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 인프런 | 강의
실무에 가까운 예제로, 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 설계하고 개발합니다. 이 과정을 통해 스프링 부트와 JPA를 실무에서 어떻게 활용해야 하는지 이해할 수 있습니다., 스프
www.inflearn.com
Runwith, springboottest어노테이션이 없이 테스트 하면 어떻게 되나요? - 인프런 | 질문 & 답변
이전에는 그 어노테이션 없이 test를 진행했던것같은데이번에는 저 어노테이션이 추가가되어있네요어떤 차이인거죠?runwith 어노테이션은 junit에 내장된 러너를 사용하는 대신 어노테이션에 정의
www.inflearn.com
JUnit 5 User Guide
Although the JUnit Jupiter programming model and extension model do not support JUnit 4 features such as Rules and Runners natively, it is not expected that source code maintainers will need to update all of their existing tests, test extensions, and custo
junit.org
[JAVA] UnitTest에서 사용하는 AssertJ의 AssertThat이란?
기본적으로 이 단계를 만족하도록 테스트를 작성할 수 있다. 간혹 그렇지 않은 경우도 있지만 초심자라면 더더욱 이것을 따르는 것이 좋다!! 1. given: 어떤 상황이 주어졌을 때(이 데이터 기반으
hseungyeon.tistory.com
@Before, @After - JUnit5
아래의 예제 대로 실행을 하면 Before, test,After 가 순차적으로 진행이 되어야한다. public class BeforeAfter { @Before public void SetUp(){ System.out.println("Before"); } @Test void transformation() { System.out.println("test"); } @
deviscreen.tistory.com
'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 |