main을 통해 실행하기에는 테스트하려는 것에 비해 너무 무거움.
JUnit이라는 프레임워크로 손쉽게 테스트
먼저 test폴더에
G:\spring\hello-spring\src\test\java\hello\hellospring\repository\MemoryMemberRepositoryTest.java
보통 관례가 테스트할거 + Test가 클래스명임.
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의 id로 검색함.
Member result = repository.findById(member.getId()).get(); //Optional에서는 get()으로 값을 꺼냄.
//검증
// System.out.println("result = " + (result == member)); 이것도 가능하긴 함
// Assertions.assertEquals(result,member); //이것도 가능. 이거는 다르면 에러뜸
Assertions.assertThat(member).isEqualTo(result); //※중요 Assertions는 assertj.core 껄로 해야함.
//이것도 다를 시 에러
}
@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);
}
}
@Test
이거 있으면 저 함수만 따로 테스트 할 수 있음. 왼쪽에 플레이 버튼 생김.
그리고 class 옆에도 Play 버튼 생기는데, 근데 문제는 이렇게 할 경우 어떤 순서로 함수를 호출할 지 모름.
그 때 필요한 게
@AfterEach
각 함수가 끝날때마다, 그러니까 당연히 함수에서 함수 호출한 거 말고, 내가 테스트 명시한 저 함수들 다 호출해 보는거 일듯? 그 함수 끝나면 @AfterEach 아래에 있는 함수 돌리는 걸로.
MemoryMemberRepository.clearStore();
이거는 따로 MemoryMemberRepository에 함수 추가로 만든거. 저 MemoryMemberRepository 안에 있는 static 사용자 리스트(HashMap)을 Clear() 해줌.
참고로 폴더 우클릭, Run도 가능하기에 여러 Class 동시에 테스트 할 필요 있으면 test 폴더를 그렇게 돌려보면 됨.
'스프링 > 0. 입문, 전체방향' 카테고리의 다른 글
10장 회원 서비스 테스트 (0) | 2023.07.08 |
---|---|
9장 회원관리 서비스 구현 (0) | 2023.07.07 |
7강 회원관리 예제 (0) | 2023.07.06 |
6강 API 방식으로 데이터 주기 (0) | 2023.07.06 |
5강 템플릿 엔진 (0) | 2023.07.06 |