728x90
[김영한님의 스프링 입문-코드로 배우는 스프링부트, 웹 MVC, DB접근 기술을 학습 후 정리한 내용입니다.]
JUnit 단위테스트는 앞에서 간단하게 다뤄봤듯이 순수 자바코드를 이용해서 스프링을 불러오지 않고 실행하는 테스트이다. 지금 다뤄볼 것은 실제DB를 연동해서 테스트하는 방식이기 때문에 스프링을 실행시키고 해야 하는데, 바로 이때 통합테스트를 한다. 통합테스트는 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트한다.
단위테스트에 비해 달라진점?
- @SpringBootTest
- @Transactional @Autowired <- 이 2개는 단위,통합을 구분하는 annotaion은 아니고 이전에 내가 만들었던 test file과 다른 annotation을 썼다는 것을 의미한다.
@SpringBootTest: 통합테스트를 하기 위한 기본적인 annotation
@Transactional: 단위테스트에서 개별 기능의 독립적인 실행을 위해 사용했던 @AfterEach 대신에 @Transactional을 사용하여 다른 test를 시작하기 전에 db를 원래상태로 rollback해주게 하면서 독립적인 기능테스트를 가능케한다.
@Autowired: 테스트가아닌 실제 운영환경에서는 생성자를 주입하는 방식으로 DI를 했지만 테스트환경의 경우 테스트만 할 뿐 다른 곳에 injection하거나 받지 않으므로 편리한 방법인 @Autowired를 썼다.
MemberServiceIntegrationTest.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
47
48
49
50
51
52
53
54
55
|
package com.example.hellospring.service;
import com.example.hellospring.domain.Member;
import com.example.hellospring.repository.MemberRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
@Autowired
MemberService memberService;
@Autowired
MemberRepository memberRepository;
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("kang");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
void 중복체크(){
//given
Member member1 = new Member();
member1.setName("david");
Member member2 = new Member();
member2.setName("david");
//when
memberService.join(member1);
//then
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("중복된 회원이 있습니다.");
}
}
|
cs |
728x90
'Frameworks > Springboot' 카테고리의 다른 글
[Springboot] 싱글톤 컨테이너 개념 정리 (0) | 2022.07.24 |
---|---|
[Springboot] 스프링 컨테이너 & 스프링 빈 개념 정리 (0) | 2022.07.23 |
[Springboot] 객체 지향 설계를 위한 AppConfig 구성 (0) | 2022.07.22 |
[Springboot] 좋은 객체 지향 프로그래밍과 스프링 (0) | 2022.07.20 |
[Springboot] 간단한 회원 서비스 + JUnit test (0) | 2022.07.07 |
댓글