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
관리 메뉴

개발자되기 프로젝트

스프링 통합 테스트 본문

Spring Boot

스프링 통합 테스트

Seung__ 2021. 7. 23. 20:17

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


 

GitHub - bsh6463/SpringBootClass

Contribute to bsh6463/SpringBootClass development by creating an account on GitHub.

github.com

 

'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