diff --git a/SpringBoot-Introduction/Lectures/Contents.md b/SpringBoot-Introduction/Lectures/Contents.md index 9e31feb..fab1277 100644 --- a/SpringBoot-Introduction/Lectures/Contents.md +++ b/SpringBoot-Introduction/Lectures/Contents.md @@ -15,4 +15,5 @@ - [비즈니스 요구사항 정리](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture08.md) - [회원 도메인과 리포지토리 만들기](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture09.md) - [회원 리포지토리 테스트 케이스 작성](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture10.md) -- [회원 서비스 개발](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture11.md) \ No newline at end of file +- [회원 서비스 개발](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture11.md) +- [회원 서비스 테스트](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture12.md) \ No newline at end of file diff --git a/SpringBoot-Introduction/Lectures/Lecture12.md b/SpringBoot-Introduction/Lectures/Lecture12.md new file mode 100644 index 0000000..3931efa --- /dev/null +++ b/SpringBoot-Introduction/Lectures/Lecture12.md @@ -0,0 +1,23 @@ +# 회원 서비스 테스트 + +--- + +## 테스트 클래스 작성 +- `Ctrl + Shift + T` +- 테스트 코드는 과감하게 한글을 사용해도 된다(영어권 사람들과 일하는 것이 아니라면). +- 빌드될 때 테스트 코드는 실제 코드에 포함되지 않는다. +- `given`, `when`, `then` 주석을 권장하는 편이다. + - `given` : 무언가 상황이 주어졌을 때 + - `when` : 이것을 실행하면 + - `then` : 이러한 결과가 나와야 한다. +- 테스트는 예외상황이 정상상황보다 더 중요하다. +- `Ctrl + R` : 이전에 실행했던 것을 그대로 실행해준다(Mac). + - 윈도우는 `Shift + F10`을 사용한다. + +--- + +## Dependency Injection(의존성 주입) +- 직접 인스턴스를 만드는 것이 아니라 외부에서 넣어주는 것을 말한다. + - `MemberSerivce` 입장에서는 직접 `new`로 인스턴스를 만드는 것이 아니라 외부에서 `MemberRepository`를 넣어주는 것이다. + +--- \ No newline at end of file diff --git a/SpringBoot-Introduction/src/main/java/hello/springintroduction/service/MemberService.java b/SpringBoot-Introduction/src/main/java/hello/springintroduction/service/MemberService.java index 31428a4..96d1d10 100644 --- a/SpringBoot-Introduction/src/main/java/hello/springintroduction/service/MemberService.java +++ b/SpringBoot-Introduction/src/main/java/hello/springintroduction/service/MemberService.java @@ -2,14 +2,17 @@ package hello.springintroduction.service; import hello.springintroduction.domain.Member; import hello.springintroduction.repository.MemberRepository; -import hello.springintroduction.repository.MemoryMemberRepository; import java.util.List; import java.util.Optional; public class MemberService { - private final MemberRepository memberRepository = new MemoryMemberRepository(); + private final MemberRepository memberRepository; + + public MemberService(MemberRepository memberRepository) { + this.memberRepository = memberRepository; + } /* * 회원 가입 diff --git a/SpringBoot-Introduction/src/test/java/hello/springintroduction/service/MemberServiceTest.java b/SpringBoot-Introduction/src/test/java/hello/springintroduction/service/MemberServiceTest.java new file mode 100644 index 0000000..8ec8530 --- /dev/null +++ b/SpringBoot-Introduction/src/test/java/hello/springintroduction/service/MemberServiceTest.java @@ -0,0 +1,68 @@ +package hello.springintroduction.service; + +import hello.springintroduction.domain.Member; +import hello.springintroduction.repository.MemoryMemberRepository; +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.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +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("hello"); + + // when + Long saveId = memberService.join(member); + + // then + Member findMember = memberService.findOne(saveId).get(); + assertThat(member.getName()).isEqualTo(findMember.getName()); + } + + @Test + public void 중복_회원_예외() { + // given + Member member1 = new Member(); + member1.setName("spring"); + + Member member2 = new Member(); + member2.setName("spring"); + + // when + memberService.join(member1); + assertThatThrownBy(() -> memberService.join(member2)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("이미 존재하는 회원입니다."); + + // then + + } + + @Test + void findMembers() { + } + + @Test + void findOne() { + } +} \ No newline at end of file