ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 어노테이션 선언 하고 테스트 데이터 초기화 시켜줘야 함

    댓글

Designed by Tistory.