[Java Spring 무작정 따라하기] 스프링 통합 테스트

khj·2024년 8월 2일
post-thumbnail

✨ 테스트 케이스 생성

이전 글에서 JDBC로 DB와 연결을 하고 확인을 해봤었다.
이번에는 DB까지 사용해서 진행하는 통합 테스트를 만들어 볼 것이다.

이전에 만들었던 테스트 코드를 복사해서 조금 수정해주었다.

// service/MemberServiceIntegrationTest.java
package hello.hello_spring.service;

import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemberRepository;
import org.assertj.core.api.Assertions;
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
@Transactional
class MemberServiceIntegrationTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;

    @Test
    void join() {
        Member member = new Member();
        member.setName("hello");

        long saveId = memberService.join(member);

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

    @Test
    public void duplicateNameCheck() {
        Member member1 = new Member();
        member1.setName("spring");

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

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

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

@SpringBootTest 어노테이션을 사용하면 스프링 부트의 애플리케이션 컨텍스트를 로드하여 실제 애플리케이션과 유사한 환경에서 테스트를 수행할 수 있다.
그리고 @Transactional 어노테이션을 테스트 케이스에서 사용하면 AfterEach 없이도 자동으로 ROLLBACK되어 DB 상태를 테스트 전후로 일관되게 유지시켜 준다고 한다.



테스트가 문제없이 끝나고 DB도 이전과 동일한 상태를 유지하는 것을 볼 수 있다.

💡 오류?

다만 테스트 결과를 보면 빨간 텍스트가 한 줄 출력된다.
무언가 문제가 있는 것 같아 이를 찾아보았다.
빨간 텍스트의 전문은 아래와 같다.

Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

이는 Java Virtual Machine 실행 시 나타날 수 있는 일반적인 경고 중 하나라고 한다.
클래스 데이터 공유가 부트로더 클래스로만 제한되어 있다는 내용이다.
주로 성능 최적화를 위한 기능에 대한 경고일 뿐, 애플리케이션 실행에는 큰 문제가 되지 않는다고 한다.

profile
Spring, Django 개발 블로그

0개의 댓글