기존에는 회원 서비스가 직접 회원 리포지토리를 생성하도록 하였다.

이러면 memberService가 생성될 때마다 new를 호출하기 때문에 새로운 리포지토리가 나와 필요없는 작업을 하게 되었다.
따라서 직접 만드는 것이 아니라 Dependency Injection을 통해 리포지토리 생성을 다른 Object에 위임해주었다.

아래는 이를 활용해 생성한 테스트 코드이다.
package hello.hello_spring.service;
import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
@BeforeEach
public void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach(){
memberRepository.clearStore();
}
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("spring");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복_회원_예외() throws Exception {
//Given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//When
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
/*
try {
memberService.join(member2);
fail();
} catch (IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}*/
//Then
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
@BeforeEach : 각 테스트 실행 전에 호출된다. 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하 고, 의존관계도 새로 맺어준다.
아직 DI의 개념이 익숙치 않아 필요한 이유는 알지만 어떤 방식으로 활용해야하는지 감이 잘 잡히지 않았다.
좀 더 공부하고 개념을 정립하면서 이와 관련해서 문서를 더 찾아볼 필요가 있어보인다.
'BE Study > Spring' 카테고리의 다른 글
| 자바 코드로 직접 스프링 빈 등록하기 (0) | 2024.06.26 |
|---|---|
| 컴포넌트 스캔과 자동의존 관계 설정 (0) | 2024.06.21 |
| 회원 서비스 개발 (0) | 2024.06.20 |
| 회원 리포지토리 테스트 케이스 작성 (0) | 2024.06.20 |
| 회원 도메인과 리포지토리 만들기 (0) | 2024.06.20 |