From fd18326e5e3ca01fd57a2b0412f53504f52acef8 Mon Sep 17 00:00:00 2001 From: banjjoknim Date: Mon, 21 Dec 2020 23:02:00 +0900 Subject: [PATCH] =?UTF-8?q?[=EA=B9=80=EC=98=81=ED=95=9C=EB=8B=98=EC=9D=98?= =?UTF-8?q?=20=EC=8A=A4=ED=94=84=EB=A7=81=20=EC=9E=85=EB=AC=B8=20-=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EB=A1=9C=20=EB=B0=B0=EC=9A=B0=EB=8A=94=20?= =?UTF-8?q?=EC=8A=A4=ED=94=84=EB=A7=81=20=EB=B6=80=ED=8A=B8,=20=EC=9B=B9?= =?UTF-8?q?=20MVC,=20DB=20=EC=A0=91=EA=B7=BC=20=EA=B8=B0=EC=88=A0]=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EA=B4=80=EB=A6=AC=20=EC=98=88=EC=A0=9C=20?= =?UTF-8?q?-=20=EB=B0=B1=EC=97=94=EB=93=9C=20=EA=B0=9C=EB=B0=9C=20-=20'?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EB=A6=AC=ED=8F=AC=EC=A7=80=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EC=9E=91=EC=84=B1'=20=EC=88=98=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpringBoot-Introduction/Lectures/Contents.md | 3 +- SpringBoot-Introduction/Lectures/Lecture10.md | 32 +++++++++ .../repository/MemoryMemberRepository.java | 4 ++ .../MemoryMemberRepositoryTest.java | 70 +++++++++++++++++++ 4 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 SpringBoot-Introduction/Lectures/Lecture10.md create mode 100644 SpringBoot-Introduction/src/test/java/hello/springintroduction/repository/MemoryMemberRepositoryTest.java diff --git a/SpringBoot-Introduction/Lectures/Contents.md b/SpringBoot-Introduction/Lectures/Contents.md index 00c9545..4cfb707 100644 --- a/SpringBoot-Introduction/Lectures/Contents.md +++ b/SpringBoot-Introduction/Lectures/Contents.md @@ -13,4 +13,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) \ No newline at end of file +- [회원 도메인과 리포지토리 만들기](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture09.md) +- [회원 리포지토리 테스트 케이스 작성](https://github.com/banjjoknim/TIL/blob/master/SpringBoot-Introduction/Lectures/Lecture10.md) \ No newline at end of file diff --git a/SpringBoot-Introduction/Lectures/Lecture10.md b/SpringBoot-Introduction/Lectures/Lecture10.md new file mode 100644 index 0000000..f3da991 --- /dev/null +++ b/SpringBoot-Introduction/Lectures/Lecture10.md @@ -0,0 +1,32 @@ +# 회원 리포지토리 테스트 케이스 작성 +- 개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다. +- 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. +- 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다. + +--- + +## 테스트 클래스 명명법 관례 +- `테스트하고자 하는 클래스의 이름` + `Test`로 짓는다. + +--- + +## 테스트가 실패한다면? +- 실무에서는 빌드 툴에서 빌드할 때 테스트가 통과하지 않으면 다음 단계로 못 넘어가게 막아버린다. + +--- + +## 테스트는 순서가 보장이 안된다 +- 모든 테스트는 순서에 관계없이 메서드별로 각자 동작하게끔 만들어야 한다. +- 순서의 의존적으로 설계하면 절대 안된다. + +--- + +## 테스트가 끝날 때마다 데이터를 클리어 해줘야 한다. +- `@AfterEach` 어노테이션을 붙여서 메서드를 만들면 테스트 하나가 끝날 때마다 동작하는 메서드를 정의할 수 있다. + +--- + +## TDD(Test Driven Development) +- 테스트를 먼저 만들고 구현 클래스를 만들어서 테스트를 실행하는 방식으로 개발하는 방법을 말한다. + +--- \ No newline at end of file diff --git a/SpringBoot-Introduction/src/main/java/hello/springintroduction/repository/MemoryMemberRepository.java b/SpringBoot-Introduction/src/main/java/hello/springintroduction/repository/MemoryMemberRepository.java index 498bb4f..fe41fae 100644 --- a/SpringBoot-Introduction/src/main/java/hello/springintroduction/repository/MemoryMemberRepository.java +++ b/SpringBoot-Introduction/src/main/java/hello/springintroduction/repository/MemoryMemberRepository.java @@ -32,4 +32,8 @@ public class MemoryMemberRepository implements MemberRepository { public List findAll() { return new ArrayList<>(store.values()); } + + public void clearStore() { + store.clear(); + } } diff --git a/SpringBoot-Introduction/src/test/java/hello/springintroduction/repository/MemoryMemberRepositoryTest.java b/SpringBoot-Introduction/src/test/java/hello/springintroduction/repository/MemoryMemberRepositoryTest.java new file mode 100644 index 0000000..5f2a517 --- /dev/null +++ b/SpringBoot-Introduction/src/test/java/hello/springintroduction/repository/MemoryMemberRepositoryTest.java @@ -0,0 +1,70 @@ +package hello.springintroduction.repository; + +import hello.springintroduction.domain.Member; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class MemoryMemberRepositoryTest { + + MemoryMemberRepository repository = new MemoryMemberRepository(); + + @AfterEach + public void afterEach() { + repository.clearStore(); + } + + @Test + public void save() { + // given + Member member = new Member(); + member.setName("spring"); + + // when + repository.save(member); + + // then + Member result = repository.findById(member.getId()).get(); + assertThat(member).isEqualTo(result); + } + + @Test + public void findByName() { + // given + Member member1 = new Member(); + member1.setName("spring1"); + repository.save(member1); + + Member member2 = new Member(); + member2.setName("spring2"); + repository.save(member2); + + // when + Member result = repository.findByName("spring1").get(); + + // then + assertThat(result).isEqualTo(member1); + } + + @Test + public void findAll() { + // given + Member member1 = new Member(); + member1.setName("spring1"); + repository.save(member1); + + Member member2 = new Member(); + member2.setName("spring2"); + repository.save(member2); + + // when + List result = repository.findAll(); + + // then + assertThat(result.size()).isEqualTo(2); + } + +}