@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을 추가했다.
이 테스트는 BankMember 객체를 데이터베이스에 저장하고 그 결과를 검증. 이 테스트는 데이터베이스 상태를 변경하므로 @Transactional 애너테이션을 추가
이 테스트는 데이터베이스에서 BankMember를 조회. 이 경우에도 데이터베이스 상태를 롤백하는 것이 좋다. 그러나 이 테스트가 실제로 저장된 데이터를 사용하지 않는다면, 트랜잭션을 사용하지 않아도 됩니다.
이 테스트는 여러 BankMember 객체를 데이터베이스에 저장하고 이를 검증. 이 테스트도 데이터베이스 상태를 변경하므로 @Transactional 애너테이션을 추가하는 것이 좋음