import문 생략
public class MemoryMemberRepositoryTest{
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();
Assertions.assertEquals(member,result);
Assertions.assertThat(member).isEqualsTo(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);
Member result = repository.findByName("spring").get();
org.assertj.core.api.Assertions.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();
org.assertj.core.api.Assertions.assertThat(result.size()).isEqualsTo(2);
}
}
AfterEach -> 한 메소드가 끝나면 clearStore 로 자원정리, 하지 않는다면 spring문자열이 충돌
save 메소드 -> Member 객체를 만들어서 spring 문자열 입력,
repository객체로 save 메소드에 member 전달
repository 객체로 이동, findById 메소드로 member에 저장된 id 반환, -> 자료형 Optional<멤버> -> get()으로 멤버만 뽑아옴
Assertions.assertEquals 로 두개의 인자를 비교,
맞으면 다음 로직 실행, 틀리면 오류, 로직 종료
import 생략
public interface MemberRepository{
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
추상 메소드로 상속받는 클래스가 메소드들 오버라이딩 되게 함
import 생략
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@override
public Member save(Member member){
member.setId(++sequence);
store.put(member.getId(),member);
return member;
}
@Override
public Optional<Member> findById(Long id){
return Optional.ofNullable(store.get(id))
}
@Override
public Optional<Member> findByName(String name){
return store.values().stream().filter(member ->member.getName().equals(name)).findAny();
}
@override
public List<Member> findAll(){
return new ArrayList<>(store.values());
}
public void clearStore(){
store.clear();
}
}