
public class MemoryMemberRepositoryTest {
MemoryMemberRepository memoryMemberRepository = new MemoryMemberRepository();
// @Test 어노테이션을 붙여야 Test 메서드인지 앎
@Test
public void save(){
// 객체 생성
Member member = new Member();
// 생성된 객체에 이름 저장
member.setName("홍길동");
// 레파지토리에 객체 저장
memoryMemberRepository.save(member);
// optional에서 값을 꺼낼 땐 get으로 꺼냄, 좋은 방법은 아니나 테스트 코드니 허용
// 객체에 저장된 id를 불러와서 result 인스턴스로 저장
Member result = memoryMemberRepository.findById(member.getId()).get();
// result인스턴스와 member인스턴스가 같은 것인지 확인
// System.out.println("result = " + (result==member));
Assertions.assertEquals(member, result);
}
}

public class MemoryMemberRepositoryTest {
MemoryMemberRepository memoryMemberRepository = new MemoryMemberRepository();
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("홍길동1");
memoryMemberRepository.save(member1);
Member member2 = new Member();
member2.setName("홍길동2");
memoryMemberRepository.save(member2);
List<Member> result = memoryMemberRepository.findAll();
assertThat(result.size()).isEqualTo(2);
}
}

public class MemoryMemberRepositoryTest {
MemoryMemberRepository memoryMemberRepository = new MemoryMemberRepository();
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("홍길동1");
memoryMemberRepository.save(member1);
Member member2 = new Member();
member2.setName("홍길동2");
memoryMemberRepository.save(member2);
Member result = memoryMemberRepository.findByName(member1.getName()).get();
Assertions.assertEquals(member1, result);
Optional<Member> result2 = memoryMemberRepository.findByName(member2.getName());
Member result3 = result2.get();
assertThat(result3).isEqualTo(member2);
}
}


테스트 파일은 순차적으로 실행되지 않고 쓰레드로 실행이 된다. 따라서 findAll 메서드에서 이미 생성된 인스턴스가 있기때문에 findByName에서 오류가 난다.
자원을 반납해준다!
public void clearStore() {
users.clear();
}
@AfterEach
public void clear(){
memoryMemberRepository.clearStore();
}
테스트가 실행된 후 자원을 반납해준다.

정상실행!
이렇게 레파지토리를 만든 후 테스를 해보았지만, 테스트 후에 개발을 하는 경우도 있다. 이것을 TDD라고 한다.