스프링/0. 입문, 전체방향

8강 회원관리 예제 테스트

sdafdq 2023. 7. 6. 23:44

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