Back-End/Spring

[SpringBoot][스프링 입문] - 3.2 회원 도메인과 리포지토리 만들기 / 3.3 회원 리포지토리 테스트 케이스 작성

얄루몬 2021. 12. 23. 18:08

1. 회원 도메인과 리포지토리 만들기

  • 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
  • 도메인: 회원/주문/쿠폰 처럼 데이터베이서에 저장하고 관리되는 도메인 객체

 

package hello.hellospring.domain;

public class Member {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

<회원관리 리포지토리(인터페이스)>

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    Member save(Member member); //회원을 저장하면 저장한 회원이 반환됨.
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();
}

 

<회원관리 리포지토리(구현)>

package hello.hellospring.repository;

import hello.hellospring.domain.Member;

import java.util.*;

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); //ID 세팅
        store.put(member.getId(),member); //스토어에 저장
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id)); //null여도 반환 가능
    }

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();

    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }
}

 

2. TEST CASE

작성한 클래스가 동작하는지 확인하기 위해서는 TEST CASE를 사용한다.

JUnit이라는 프레임워크로 테스트를 실행한다. (java test framework)

 

  • 그러나 매번 System.out.println();을 사용해서 테스트케이스를 진행할 수 없기 때문에 'Assertions.asserEquals(기대하는 값, 실제값);' 을 사용해 진행하도록 한다. 
  • 두 값이 같을 땐 문제 없이 아래와 같이 초록불이 뜨지만 기대값과 다른 실제값이 들어갈 땐 AssertionFailError가 뜨게 된다. 

Assertions.assertEquals(기대값,실제값); 사용