Spring : Test 코드 작성(1)

김선미·2022년 8월 29일
0
@Test
    public void save() {
        Member member = new Member();
        member.setName("spring");
        memberRepository.save(member);
        Member result = memberRepository.findById(member.getId()).get();

        System.out.println("result=" + (result==member));
        //sout를 통한 메소드 검증 
        //출력: result=true

        Assertions.assertEquals(member, result);
        //junit의 Assertions 기능을 통한 메소드 검증
        //result와 member가 일치하는지 확인
        //출력: Run창에 Test result 옆에 초록색 표시가 뜸
        // 틀릴 경우 빨간색 표시 

        Assertions.assertThat(member).isEqualTo(result);
        //asserj의 Assertions 기능을 통한 메소드 검증
    }
}
  • Assertions : static import (정적 임포트), alt+enter로 임포트하면 Assertions를 입력하지 않고 assertThat을 바로 사용할 수 있다.
  • 실무에서는 테스트 코드를 build tool과 엮어 build 단계에서 테스트 실행 후 테스트가 잘못되면 build 되지 않게 사용한다.
  • 테스트 코드 작성(MemoryMemberRepositoryTest - findByName method)
 @Test
    public void findByName() {
        Member member1 = new Member();
        member1.setName("spring1");
        memberRepository.save(member1);

        Member member2 = new Member();
        member2.setName("spring2");
        memberRepository.save(member2);

        Member result = memberRepository.findByName("spring1").get();

        assertThat(member1).isEqualTo(result);
    }
  • get()을 사용하는 이유 : optional 자료형일 경우 assertThat 등을 검증할 때 변수로 사용이 안되는 것 같다.(추측)
memberRepository.findByName("spring1");
Optional<Member> spring1 = memberRepository.findByName("spring1");
// ctrl+alt+V 사용시 반환타입이 Optional 반환됨

memberRepository.findByName("spring1").get();
Member spring1 = memberRepository.findByName("spring1").get();
//get() 사용시 Optional 내부의 Member가 반환됨 
  • @AfterEach : 여러 테스트 메소드에서 중복된 내용을 DB에 저장할 경우 테스트 오류가 발생한다. 이때, AfterEach를 사용해 각각의 테스트를 실행 후 특정 메소드(clear)를 실행해주면 오류가 발생하지 않는다.
  • 코드 추가 (MemoryMemberRepositoryTest)
    @AfterEach
    public void afterEach() {
        memberRepository.clearStore();
    }
  • 코드 추가 (MemoryMemberRepository)
    public void clearStore() {
        store.clear();
    }
  • TDD(테스트 주도 개발) : 코드를 작성 후 테스트 코드 작성이 아니라 테스트 코드를 먼저 작성 후 코드를 작성하는 것

참조
스프링 입문 - 김영한

profile
백엔드 개발 공부

0개의 댓글