📂 test/java/repository/MemoryMemberRepository.Test
package com.example.demo_practice.repository;
import com.example.demo_practice.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.*;
class MemoryMemberReposiotryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach(){
repository.clearStore();
}
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result=repository.findById(member.getId()).get(); // .get() optional안에 있는 객체를 꺼내오기.
assertThat(member).isEqualTo(result);
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
repository.findByName("spring1");
Member result = repository.findByName("spring1").get();
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll(){
Member member1= new Member();
member1.setName("spring1");
repository.save(member1);
Member member2= new Member();
member2.setName("spring2");
repository.save(member2);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(2);
}
}
@AfterEach : 한번에 여러 테스트를 진행하면 메모리 DB에 전에 있던 테스트 결과가 남아있을 수가 있다. 그래서 다음 테스트를 진행할때 실패할 경우가 잇는데 이를 방지하기 위하여서 작성하는 것이다.
@AfterEach를 사용하게 되면 테스트가 종료될 때마다 이 기능을 실행을 한다. 그래서 안에 들어있는
clearStore() ---> MemoryMemberRepository에 새로운 메소드를 만들어서 메모리 DB안의 데이터들을 다 삭제시키는 역할로 만들어놨다.
@Test: Junit을 활용하여 Test하기위하여 작성한 annotation이다.
테스트를 위한 것을 구현 후 -> 구현 클래스들을 만드는 방법 : TDD방식
Optional에는 Optional.get() 을 사용하면 Optional로 감싸져있는 객체를 꺼내올 수 있다.
Assertj의 Assertion 과 Junit
의 Assertion이 있는데 Assertj
의 Assertion을 사용한 이유는 쉽게 말하자면은 assertThat
을 활용할때 AssertJ는 간단하게 기댓값과 결과값만 넣으면 되지만 Junit은 검증대상과 로직을 비교한다는 측면에서 Assertj가 더 가독성이 좋다.
정리하자면 Assertj를 사용하는 이유는 자동완성
, Assertion분류
, 확장성
이 가장 큰 이유이다.
김영한 - 스프링 입문 강의