[Spring] 회원 서비스 테스트 코드 작성해보기

Haeun Noh·2023년 8월 15일
1

TweeksStudy:1 (Spring)

목록 보기
11/13
post-thumbnail

0815


  • test 클래스 만드는 단축키 : 서비스 클래스명을 클릭한 뒤, Ctrl + Shift + t (window)

  • 테스트의 메서드명은 과감히 한글로 작성해도 된다.

    • 직관적으로 쉽게 알아들을 수 있기 때문!

1. given / when / then

  • given : 무언가가 주어졌는데

    • 무슨 데이터 기반인지를 알 수 있다!
  • when : 이것을 실행했을 때

    • 검증하는 것을 알 수 있다!
  • then : 어떤 결과가 나와야 돼

    • 검증 부분을 알 수 있다!

2. 중복 회원 예외 테스트 케이스 작성하기

2.1. try-catch문 활용

    @Test
    public void 중복_회원_예외() {
        // given
        Member member1 = new Member();
        member1.setName("spring");

        Member member2 = new Member();
        member2.setName("spring");

        // when
        memberService.join(member1);
        try {
            memberService.join(member2);
            fail();
        } catch (IllegalStateException e) {
            assertThat(e.getMessage()).isEqualTo("이미 존재함");
        }

        // then
    }

이렇게 try-catch문을 활용할 수도 있지만,
중복 확인만을 위해 try-catch문을 넣는 것은 애매하다.


2.2. assertThrows 활용

        memberService.join(member1);
        assertThrows(IllegalStateException.class, () -> memberService.join(member2));
  • Ctrl + Alt + V : 에러 반환 값을 받아옴
  • Shift + f10 : 이전의 실행을 똑같이 실행

3. 같은 클래스의 객체가 여러 개 생성되었을 때 - BeforeEach(), DI

같은 클래스의 객체가 여러 개 생성되었을 때는 static을 사용하지 않았다면 코드에 문제가 생길 수 있다.

따라서 생성자를 통해 외부에서 값을 넣어줄 수 있게 바꿔준다!

public class MemberService {
    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
    // ...
}
  • Test에서 MemberService를 생성할 때 MemoryMemberRepository를 내가 직접 넣어준다.
    • BeforeEach()
class MemoryRepositoryTest {
    MemberService memberService;
    MemoryMemberRepository memberRepository;

    @BeforeEach
    public void beforeEach() {
        memberRepository = new MemoryMemberRepository();
        memberService = new MemberService(memberRepository);
    }
    // ...
}
  • DI : 의존 관계를 외부에서 결정(주입)해주는 것


profile
Tistory로 옮기게 되었습니다. @haeunnohh

2개의 댓글

comment-user-thumbnail
2023년 8월 15일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

1개의 답글