* 인프런 김영한님의 '스프링 입문' 강의를 듣고 작성한 내용입니다! (https://inf.run/txXC)
프로젝트를 실행시켜서 테스트 해볼 수 있지만, 준비하고 실행하는데 시간이 오래걸린다. 따라서 JUnit framework를 사용해 테스트를 한다
회원 레포지토리 테스트 케이스 작성
1. src/test/java/hello.hellospring/repository (package 생성)
2. repository/MemoryMemberRepositoryTest (java 파일 생성)
[MemoryMemberRepositoryTest.java 소스코드]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package hello.hellospring.repository; | |
import hello.hellospring.domain.Member; | |
import org.assertj.core.api.Assertions; // alt + enter 쳐서 static import 해준다 | |
import org.junit.jupiter.api.AfterEach; | |
import org.junit.jupiter.api.Test; | |
import java.util.List; | |
import java.util.Optional; | |
import static org.assertj.core.api.Assertions.*; | |
public class MemoryMemberRepositoryTest { | |
MemoryMemberRepository repository = new MemoryMemberRepository(); | |
@AfterEach | |
public void afterEach() { // test function이 끝나고 호출되는 함수 | |
repository.clearStore(); // MemoryMemberRepository 에 clearStore 함수를 만들어준다 | |
} | |
@Test | |
public void save() { | |
Member member = new Member(); | |
member.setName("spring"); | |
repository.save(member); | |
Member result = repository.findById(member.getId()).get(); // optional type에서 data꺼낼 때 .get() 사용 | |
// Assertions.assertEquals(result, member); // (expected, result) - org.junit.jupyter | |
assertThat(member).isEqualTo(result); // 초록불 뜨면 true - org.assertj (이걸 더 많이 쓴다) | |
// assertThat(member).isEqualTo(null); // 빨간불 - false | |
} | |
@Test | |
public void findByName() { | |
// member1이 가입 | |
Member member1 = new Member(); | |
member1.setName("spring1"); | |
repository.save(member1); | |
// member2가 가입 | |
Member member2 = new Member(); | |
member2.setName("spring2"); | |
repository.save(member2); | |
Member result = repository.findByName("spring1").get(); | |
assertThat(result).isEqualTo(member1); // true | |
// assertThat(result).isEqualTo(member2); // false | |
} | |
@Test | |
public void findAll() { | |
Member member1 = new Member(); | |
member1.setName("spring1"); | |
repository.save(member1); | |
Member member2 = new Member(); | |
member2.setName("spring2"); | |
repository.save(member2); | |
List<Member> result = repository.findAll(); | |
assertThat(result.size()).isEqualTo(2); | |
} | |
} |
- 각 method에 @Test annotation을 붙여준다
- 보통 Test file 생성할 때 원래 class 명 + Test 로 생성한다
- given : 어떤게 주어졌을 때 / when : 이것을 실행했을 때 / then : 이게 나와야 한다 (김영한 님이 주로 사용하는 방법)
- 각각의 method옆의 초록색 run 버튼으로 함수하나씩 실행할 수 있고, class전체를 실행할 수 있다
- Class 전체를 실행시키면, method 순서 상관없이 실행된다 => Test는 순서에 의존하지 않고 실행되어야 한다(독립적으로)
- 하나의 테스트 실행 후에 DB를 지워준 다음에 그다음 테스트를 진행해야 한다 => @AfterEach annotation을 사용해 하나의 테스트 후에(after) 실행해야 할 것을 적어준다 (clearStore())
'개발 > Spring' 카테고리의 다른 글
[스프링 입문] 스프링 회원관리 예제 - 5. 스프링 빈과 의존관계 (0) | 2021.06.30 |
---|---|
[스프링 입문] 스프링 회원관리 예제 - 4. 회원 서비스 개발 및 테스트 (0) | 2021.06.29 |
[스프링 입문] 스프링 회원관리 예제 - 2. 회원 도메인, 레포지토리 만들기 (0) | 2021.06.29 |
[스프링 입문] 스프링 회원관리 예제 - 1. 비즈니스 요구사항 정리 (0) | 2021.06.29 |
[스프링 입문] 스프링 정적컨텐츠, MVC, API (0) | 2021.06.29 |