λ°±μ—”λ“œ(Back-End) 개발/SpringBoot

[SpringBoot] 6.3_μŠ€ν”„λ§ 톡합 ν…ŒμŠ€νŠΈ (DBμ—°κ²°)

rabo93 2025. 2. 26. 02:23

μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ™€ DBκΉŒμ§€ μ—°κ²°ν•˜λŠ” 톡합 ν…ŒμŠ€νŠΈ 진행해보기!

package hello.hello_spring.service;

import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.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
@Transactional //ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ— @Transaction μ–΄λ…Έν…Œμ΄μ…˜μ„ 뢙이면, ν…ŒμŠ€νŠΈ μ™„λ£Œ ν›„ ν…ŒμŠ€νŠΈλ°μ΄ν„° Rollback κΈ°λŠ₯(DB에 데이터 μ €μž₯X)
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);
        assertThrows(IllegalStateException.class, () -> memberService
                .join(member2));
    }

}

 

  • @SpringBootTest :  μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ™€ ν…ŒμŠ€νŠΈλ₯Ό ν•¨κ»˜ μ‹€ν–‰ν•œλ‹€
  • @Transactional : ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λΆ™μ˜€μ„ λ•Œ, ν…ŒμŠ€νŠΈ μ‹œμž‘ 전에 νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³ , ν…ŒμŠ€νŠΈ μ™„λ£Œ 후에 항상 λ‘€λ°±ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ DB에 데이터가 남지 μ•ŠμœΌλ―€λ‘œ λ‹€μŒ ν…ŒμŠ€νŠΈμ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€.

** λ‹¨μœ„ ν…ŒμŠ€νŠΈ : μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ°€μž₯ μž‘μ€ λ‹¨μœ„μΈ λͺ¨λ“ˆ, ν•¨μˆ˜, 클래슀, λ©”μ„œλ“œ λ“±μ˜ κ°œλ³„적인 λ‹¨μœ„λ₯Ό λΆ„λ¦¬ν•˜μ—¬ ν…ŒμŠ€νŠΈ

** 톡합 ν…ŒμŠ€νŠΈ : μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  ꡬ성 μš”μ†Œκ°€ μ˜ˆμƒλŒ€λ‘œ ν•¨κ»˜ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ ν…ŒμŠ€νŠΈ