-
[Spring] junit 테스트 해보기Spring 2022. 1. 20. 18:01
인프런 수업 [우아한 형제 김영한]
패키지, 클래스, 인터페이스 생성
hello.hellospring.domain -> Member.java
hello.hellospring.repository-> MemberRepository.java (인터페이스)
hello.hellospring.repository-> MemoryMemberRepository.java
hello.hellospring.domain -> Member.java
package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
hello.hellospring.repository-> MemberRepository.java (인터페이스)
package hello.hellospring.repository; import java.util.List; import java.util.Optional; import hello.hellospring.domain.Member; public interface MemberRepository { // 회원 저장 Member save(Member member); // 아이디로 찾기 Optional<Member> findById(Long id); // 이름으로 찾기 Optional<Member> findByName(String name); // 모든 회원 찾기 List<Member> findAll(); }
hello.hellospring.repository-> MemoryMemberRepository.java
package hello.hellospring.repository; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import hello.hellospring.domain.Member; public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { // 아이디를 시퀀스로 member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { // null 대비하여 Optional.ofNullable 사용 return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { // store 저장된 값을 필터링 후 name과 같으면 반환 return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { // Map을 ArrayList에 담아 반환 return new ArrayList<>(store.values()); } // 메모리에 저장된 정보 삭제 public void clearStore() { store.clear(); } }
테스트 패키지 및 클래스 생성
src/test/java -> hello.hellospring.repository -> MemoryMemberRepositoryTest.java
package hello.hellospring.repository; import java.util.List; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import hello.hellospring.domain.Member; public class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); // 각 jUnit 테스트 후 실행되는 AfterEach @AfterEach public void afterEach() { repository.clearStore(); } // jUnit Test임을 명시 @Test public void save() { // 테스트 객체1 Member member1 = new Member(); member1.setName("Kim1"); // save() 메소드 테스트 repository.save(member1); // Optional 에서 데이터 추출 시, get() 메소드 사용 Member result = repository.findById(member1.getId()).get(); // 확인 Assertions.assertThat(member1).isEqualTo(result); } @Test public void findByName() { // 테스트 객체1 Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); // 테스트 객체2 Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); // findByName() 메소드 테스트 Member result = repository.findByName("spring1").get(); // 확인 Assertions.assertThat(member1).isEqualTo(result); } @Test public void findByAll() { // 테스트 객체1 Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); // 테스트 객체2 Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); // 테스트 객체3 Member member3 = new Member(); member3.setName("spring3"); repository.save(member3); // findAll() 메소드 테스트 List<Member> result = repository.findAll(); // 확인 Assertions.assertThat(result.size()).isEqualTo(3); } }
JUnit 테스트 실행 (개별 메소드 실행)
JUnit 테스트 실행 (전체 메소드 실행)
만약 데이터가 안맞아 테스트를 성공 못할 시,
해당 메소드에 x표 표시되며 대략적인 설명이 나옴
* 주의사항
JUnit 테스트 시(전체), 어떤 메소드가 먼저 실행될지 모르기 때문에
@AfterEach 어노테이션 선언 하고 테스트 데이터 초기화 시켜줘야 함
'Spring' 카테고리의 다른 글
[Spring Boot] Lombok 롬복 설치 (Eclipse STS) (0) 2022.05.26 [Spring] STS 롬복 설치 후 에러 (0) 2022.03.10 [Spring] 스프링 부트 빌드 해보기 (Windows 10 - JAVA 11) (0) 2022.01.19 [Spring] 스프링 부트 웹 MVC 프로젝트 생성 (자바 11, 그레이들) (0) 2022.01.17 [Spring] 스프링과 스프링 부트 차이 이해하기 (0) 2022.01.13