Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- jpa
- springdatajpa
- 스프링 핵심 원리
- JPQL
- 김영한
- JDBC
- spring
- java
- Servlet
- 백준
- 그리디
- pointcut
- kotlin
- QueryDSL
- 스프링
- transaction
- http
- Greedy
- Exception
- Spring Boot
- 알고리즘
- Thymeleaf
- Proxy
- SpringBoot
- 스프링 핵심 기능
- Android
- AOP
- 인프런
- db
Archives
- Today
- Total
개발자되기 프로젝트
스프링 통합 테스트 본문
Spring을 사용,DB 연결까지 모두 테스트를 해보자!
0. @SpringBootTest
@SpringBootTest //스프링 테스트
class MemberServiceIntegrationTest {
1. 스프링 빈에서 주입을 받자
기존에 작성한 test는 각 Test실행 전 memberReository를 직접 생성하고 memberService에 직접 주입해 줬다.
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
하지만 현재 memberRepository, memberService는 스프링 빈으로 등록되어 있다.
따라서 직접 만들 필요는 없고 스프링 컨테이너에서 주입 받으면 된다.
@Autowired를 통해 스프링한테 내놓으라고 하면 된다.
@Autowired // "줘-"
MemberService memberService;
@Autowired //"줘-"
MemberRepository memberRepository;
2.테스트는 반복할 수 있어야 한다!
이 전에는 각 테스트가 종료된 후 clear하기 위해 매번 별도의 코드를 실행했다.
@AfterEach //각 method실행 끝날대마다 실행
public void afterEach(){
memberRepository.clearStore();
}
Test의 경우 @Transcational 을 적용하면 Test종료 후 DB를 rollback 해버림
따라서 반복적으로 test가 가능하다.
@SpringBootTest //스프링 테스트
@Transactional
class MemberServiceIntegrationTest {
@Autowired //스프링한테 "내놔"
MemberService memberService;
@Autowired //스프링한테 "내놔"
MemberRepository memberRepository;
@Test //Test는 한글로 바꿔도됨 ㅋㅋㅋ
void 회원가입() {
//Test는 아래와 같은 문법으로 진행하자.
//given
Member member = new Member();
member.setName("hello");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getId()).isEqualTo(findMember.getId());
}
//Test는 정상 flow도 좋지만 예외 flow가 갱장히 중요하다!
@Test
public void 중복_회원_예외(){
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//when
memberService.join(member1);
//then
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
3. 결과
4. 단위 테스트
정말 단뒤단위로 쪼개서 테스트를 구성하여, 스프링 컨테이너 없이 테스트를 할 수 있도록 하자.
5. GitHub : 210722,integration test
'Spring Boot' 카테고리의 다른 글
Spring Data JPA (0) | 2021.07.24 |
---|---|
JdbcTemplate (0) | 2021.07.23 |
Jdbc활용하여 Application에서 DB로 넘겨보자. (0) | 2021.07.23 |
H2 Database 설치 및 사용 법 (0) | 2021.07.23 |
홈 화면 추가 & 웹 기능 (0) | 2021.07.22 |
Comments