본문 바로가기
Back-End/Spring Boot

회원 관리 예제 - 백엔드 개발 / 회원 서비스 테스트

by 달의 조각 2022. 2. 23.
이 글은 김영한 님의 스프링 입문 강의(https://inf.run/hcic)를 수강하며 학습한 내용을 정리한 글입니다.

 

1. 테스트 케이스 파일 만들기

Ctrl + Shift + T

˙ 테스트의 경우 한글 이름을 많이 사용한다
˙ given, when, then 기법

    @Test
    void 회원가입() {
        //given
        
        //when
        
        //then
    }

 

2. 회원가입 테스트 메서드

1) 가입

 

2) 중복 예외가 잘 동작하는지 테스트

˙ try-catch 방법

 

˙ 혹은

assertThrows 메서드

assertThrows(Class<> classType, Executable executable)

첫 번째 인자: 발생할 예외 클래스의 Class 타입
executable을 실행하여 예외가 발생할 경우 classType과 발생된 Exception이 같은 타입인지 체크한다(상속 관계 포함)

 

3. 클리어 소스 코드 작성

    MemoryMemberRepository memberRepository = new MemoryMemberRepository(); //클리어를 위해 선언
    
    @AfterEach
    public void afterEach() {
        memberRepository.clearStore();
    }

 

🚨 클리어를 위해 선언한 객체 new MemoryMemberRepository()

MemberService와
MemberServiceTest에 각각 new로 선언해 주었기 때문에 서로 다른 객체, Repository, 인스턴스를 뜻한다
서로 다른 Repository를 검사한 것과 같다

이번 예제의 MemoryMemberRespository 소스 코드에서는 인스턴스와 상관없이 static(하나의 공간)이기 때문에 문제는 없지만 static이 아니었을 경우 참조 시 문제가 발생할 것이다

기존에는 회원 서비스가 메모리 회원 리포지토리를 직접 생성하게 했다

public class MemberService {
	
    private final MemberRepository memberRepository = new MemoryMemberRepository();
}

 

💡 수정

회원 리포지토리의 코드가 회원 서비스 코드를 DI 가능하도록 변경한다

매개변수 있는 생성자를 만들어서 매개변수 연결로 서로 같은 객체를 공유하도록 한다

 

 

 

@BeforeEach

각 테스트 실행 전에 호출된다
테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고, 의존관계도 새로 맺어준다

1. 각 테스트가 실행되기 전에 22줄의 memberRepository 생성
2. 만들어진 memberRepository를 18줄에 넣는다
3. 23줄의 MemberService에 memberRepository를 넣어 준다
4. 앞으로 같은 Repository가 사용된다!

 

//이전
MemberService memberService = new MemberService();
MemoryMemberRepository memberRepository = new MemoryMemberRepository();

//수정
MemberService memberService;
MemoryMemberRepository memberRepository;

@BeforeEach
public void beforeEach() {
    memberRepository = new MemoryMemberRepository();
    memberService = new MemberService(memberRepository);
}

댓글