하지만 이러한 방법은
따라서! 자바는 JUnit 이라는 프레임워크로 테스트 코드 자체를 실행해서 이러한 문제를 해결한다.
src/test/java
하위 폴더에 생성한다.class MemoryRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
System.out.println("result = "+(result == member));
// Assertions.assertEquals(member, result);
Assertions.assertThat(member).isEqualTo(result);
}
...
}
테스트 클래스는 다른 곳에서 가져다 쓸 용도가 아니기 때문에 public
을 굳이 사용하지 않아도 된다.
Assertions : 매번 일일이 출력하는 것이 아니라 Assertions의 assertThat()을 이용하여 해당 기능이 잘 작동하는지를 알아본다.
org.assertj.core.api.Assertions
@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("spring1").get();
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();
Assertions.assertThat(result.size()).isEqualTo(2);
}
그런데! findAll()까지 만들고 나니 에러가 발생했다. 왜일까?
AfterEach를 사용하자!
AfterEach : afterEach()를 만들어 store를 한 메서드 테스트가 끝날 때마다 clear를 해주어 위와 같은 에러의 발생을 막는다.
순서와 관계없이 설계가 되어야 한다.
때문에 공용 데이터와 같은 것들은 테스트가 끝나면 깨끗하게 지워주어야 한다.
테스트를 먼저 만들고 구현 클래스를 만드는 것