반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
05-19 00:03
관리 메뉴

ImJay

[Java Spring] 1-20. 스프링 통합 테스트 본문

Java Spring/스프링 입문

[Java Spring] 1-20. 스프링 통합 테스트

ImJay 2023. 1. 30. 13:08
반응형

[Java Spring] 1-20. 스프링 통합 테스트


1. src > test > java > hello.spring > service > MemberServiceTest 복사 + 붙여넣기 > MemberServiceIntegrationTest 클래스 생성

 

2. 코드 작성

package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
class MemberServiceIntegrationTest {

    @Autowired
    MemberService memberService;
    @Autowired
    MemberRepository memberRepository;

    @Test
    void 회원가입() {
        //given
        Member member = new Member();
        member.setName("spring");

        //when
        Long saveId = memberService.join(member);

        //then
        Member findMember = memberService.findOne(saveId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());
    }

    @Test
    public void 중복_회원_예외() {
        //given
        Member member1 = new Member();
        member1.setName("spring");

        Member member2 = new Member();
        member2.setName("spring");

        //when
        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));

        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");

//        try {
//            memberService.join(member2);
//            fail();
//        } catch (IllegalStateException e) {
//            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
//        }

        //then
    }

}

- @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다.

 

3. 빌드

- 이미 데이터베이스에 같은 이름을 생성했으므로, 오류가 발생하는게 정상!

 

4. H2 콘솔에서 다음 명령어를 통해 스키마 삭제 후 다시 테스트

 

5. 테스트 통과됐음을 확인할 수 있다!

 

6. H2 콘솔을 통해 멤버가 값이 정상적으로 추가되었음을 확인할 수 있다.

 

7. 여기서 다시 한 번 테스트를 빌드하면 오류가 난다.

- 왜? : 같은 값이 이미 존재하니까.

- 그렇다면 예전처럼 또 afterEach로 delete 를 만들어주어야할까? : 훨씬 간단한 방법이 있다.

 

9. H2 콘솔에서 다음 명령어를 통해 스키마 삭제

 

10. @Transactional 어노테이션 추가

 

11. 테스트 케이스 빌드

 

12. DB 확인

- 비어 있는 것을 확인할 수 있다.

- @Transactional : 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다 즉, 다른 처리(aftereach)를 해줄 부담 없이 여러 테스트 케이스를 돌려볼 수 있다.

반응형
Comments