[12강]

2023. 2. 2. 17:27Spring 강의/section3

MemberService 코드를 테스트 해보자

 

MemberService 클래스에서 ctrl + shift + t를 누르면 자동으로 Test 클래스를 만들어준다.

테스트 코드는 given - when -then으로 나누어 작성하면 좋다.

given - 뭔가가 주어졌을 때

when - 이것을 실행하면

then - 결과가 이게 나와야 한다.

 

join() Test 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
 @Test
    void join() {
        //given - 뭔가가 주어졌을 때
        Member member = new Member();
        member.setName("hello");
 
        //when - 이것을 실행하면
        Long saveId = memberService.join(member);
 
        //then - 결과가 이게 나와야 한다.
        Member findMember = memberService.findOne(saveId).get();
        Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
    }
cs

결과

 

회원 가입 시 중복회원이 있는 경우 예외를 발생시키는 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Test
    public void 중복_회원_예외(){
        //given
        Member member1 = new Member();
        member1.setName("spring");
 
        Member member2 = new Member();
        member2.setName("spring");
 
        //when
        memberService.join(member1);
        assertThrows(IllegalStateException.class, () -> memberService.join(member2));
    }
cs

assertThrows(첫번째 인자, 두번째 인자)

두번째 인자를 실행시켰을 때 첫번째 인자와 같은 타입의 예외가 발생하는지 검사한다.

 

테스트 끝나면 그때 그때 비워주자.

1
2
3
4
5
6
    MemoryMemberRepository memberRepository = new MemoryMemberRepository();
 
    @AfterEach
    public void afterEach(){
        memberRepository.clearStore();
    }
cs

 

그런데 조금 애매한 문제가 있다.

 

MemberService에서 만든 MemoryMemberRepository 객체와

MemberServiceTest 에서 만든 MemoryMemberRepository 객체가 다르다.

 

지금이야 MemoryMemberRepository는 static이기 때문에 문제가 없으나

(static - 인스턴스와 상관없이 클래스 레벨에 붙음)

만약 static이 아니었다면 서로 다른 인스턴스라서 다른 db를 사용하며 바로 문제가 생긴다.

 

이럴 때는 memberRepository를 new 해서 생성하지 말고 외부에서 생성하도록 바꿔준다.

그러면 test 코드에서도 @BeforeEach로 테스트가 동작하기 전에 MemoryMemberRepository를 만들어서 그것을 MemberService에 넣어주면 같은 repository를 사용할 수 있다.

MemberService의 입장에서 보면 직접 new 하지 않고 외부에서 repository를 넣어준다.

이런 것을 Dependencies Injection(DI)이라고 한다.

'Spring 강의 > section3' 카테고리의 다른 글

[11강]  (0) 2023.02.02
[10강]  (0) 2023.02.02
[9강]  (0) 2023.01.30
[8강]  (0) 2023.01.30