@Transactional

황상익·2024년 8월 6일
@SpringBootTest
class MemberServiceTest {

    @Autowired
    private MemberService memberService;
    @Autowired
    private MemberRepository memberRepository;

    @Test
    @Transactional
    void saveMember(){
        BankMember bankMember = BankMember.builder()
                .name("아리")
                .password("123456789")
                .accountNumber("abc123")
                //.id(1L) 자동 할당 됨으로 굳이 필요 없음
                .age(20)
                .birth(LocalDate.of(1995, 6, 5))
                .createdAt(LocalDateTime.now())
                .grade(Grade.NORMAL)
                .address("서울")
                .build();

        BankMember saveMember = memberService.save(bankMember);
        assertNotNull(saveMember.getId());
        assertThat(saveMember.getName()).isEqualTo("아리");
        assertThat(saveMember.getPassword()).isEqualTo("123456789");
    }

    @Test
    void findById() {
        BankMember bankMember = BankMember.builder()
                .name("아리")
                .password("123456789")
                .accountNumber("abc123")
                .id(1L)
                .age(20)
                .birth(LocalDate.of(1995, 6, 5))
                .createdAt(LocalDateTime.now())
                .grade(Grade.NORMAL)
                .address("서울")
                .build();

        BankMember findMember = memberService.findById(bankMember.getId());
        assertThat(findMember.getId()).isEqualTo(1L);
    }

    @Test
    void findAll(){
        //given
        BankMember bankMember1 = BankMember.builder()
                .name("아리")
                .password("123456789")
                .accountNumber("abc123")
                .id(1L)
                .age(20)
                .birth(LocalDate.of(1995, 6, 5))
                .createdAt(LocalDateTime.now())
                .grade(Grade.NORMAL)
                .address("서울")
                .build();

        BankMember bankMember2 = BankMember.builder()
                .name("카카")
                .password("987654321")
                .accountNumber("cba321")
                .id(2L)
                .age(22)
                .birth(LocalDate.of(1995, 7, 5))
                .createdAt(LocalDateTime.now())
                .grade(Grade.NORMAL)
                .address("서울")
                .build();

        memberService.save(bankMember1);
        memberService.save(bankMember2);

        //when
        List<BankMember> bankMembers = memberService.findAll();

        //then
        assertThat(bankMembers).hasSize(2);
        assertThat(bankMembers).containsExactlyInAnyOrder(bankMember1, bankMember2);
    }
}

test을 깨끗하게 하기 위해 Transactional을 추가했다.

  • SaveMember 테스트:

이 테스트는 BankMember 객체를 데이터베이스에 저장하고 그 결과를 검증. 이 테스트는 데이터베이스 상태를 변경하므로 @Transactional 애너테이션을 추가

  • findById 테스트:

이 테스트는 데이터베이스에서 BankMember를 조회. 이 경우에도 데이터베이스 상태를 롤백하는 것이 좋다. 그러나 이 테스트가 실제로 저장된 데이터를 사용하지 않는다면, 트랜잭션을 사용하지 않아도 됩니다.

  • findAll 테스트:

이 테스트는 여러 BankMember 객체를 데이터베이스에 저장하고 이를 검증. 이 테스트도 데이터베이스 상태를 변경하므로 @Transactional 애너테이션을 추가하는 것이 좋음

profile
개발자를 향해 가는 중입니다~! 항상 겸손

0개의 댓글