본문 바로가기
스프링 공부/김영한 입문

회원관리 예제-백엔드 개발

by 코딩마스터^^ 2023. 10. 10.

순서

비즈니스 요구사항 정리

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

회원 리포지토리 테스트 케이스 작성

회원 서비스 개발

회원 서비스 테스트 만들기

 

Junit으로 테스트 할예정

 

비즈니스 요구사항

데이터 : 회원 ID, 이름

기능 : 회원등록, 조회

간단한 예제

아직 DB가 정해지지않았다는 가정으로 한다.

 

비즈니스 도메인 객체로 서비스함

 

 

회원을 저장하는것은 interface로 만들것이다. 왜냐면 아직 JDBC인지 마이바티스인지 뭔지 모름

 

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;//0,1,2생성해주는 애다 시퀀스
    @Override
    public Member save(Member member) {
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        //스토어에서 꺼낸다. 결과가 없으면 null이 반환될 가능성이 있다. 옵셔널로 감싼다. null이어도 감쌀수있다.
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        //스토어에서 루프를 돌린다. 필터를 사용(람다식) 파라미터로 넘어온 name이랑 같은지 찾는다.
        // 끝까지 돌렸는데 없으면 옵셔널로 반환된다.

        return store.values().stream()
                .filter(member -> member.getName().equals(name))//람다로 넘어온 네임과 파라미터로 넘어온 네임이 같은지
                .findAny();//결과 옵셔널로 반환. 없을때

    }

    @Override
    public List<Member> findAll() { //실무에서는 리스트 많이 쓴다. 편하다.
        return new ArrayList<>(store.values());//member들
    }
}

/*제대로 동작하는지 어떻게 알지? 테스트 케이스를 작성한다.*/

개발한 기능를 실행해서 테스트할때 메인메소드를 통해서 실행하거나 웹 어플리케이션으로 컨트롤러 통해 기능을 실행한다->번거롭다.

 

이를 해결하기위해 JUnit 프레임워크가 있다.

 

package hello.hellospring.repository;

import hello.hellospring.domain.Member;
//import org.assertj.core.api.Assertions;
import static org.assertj.core.api.Assertions.*;//이렇게하면 Assertions앞에 안붙여도 된다.
import org.junit.jupiter.api.Test;//제이유닛

class MemoryMemberRepositoryTest {
    MemberRepository repository=new MemoryMemberRepository();

    /*메인메소드 쓰는거랑 비슷하다*/
    @Test
    public void save(){
        Member member= new Member();
        member.setName("spring");

        repository.save(member);

        Member result=repository.findById(member.getId()).get();//꺼낸다
//       org.junit.jupiter.api.Assertions.assertEquals(member, result);//첫번째 파라미터 넣는것 두번째 기대하는값

        assertThat(member).isEqualTo(result); //왜 안되는건지..

    }

    @Test
    public void findByName(){
        Member member1 =new Member();
        member1.setName("spring1");
        repository.save(member1);

        Member member2 =new Member(); //shift F6하면 Rename된다.
        member2.setName("spring2");
        repository.save(member2);

        Member result=repository.findByName("spring1").get();

        assertThat(result).isEqualTo(member1);
    }//리턴값이 잘못되있었다. 확인하고 잘 돌리자.
}

'스프링 공부 > 김영한 입문' 카테고리의 다른 글

스프링 웹개발 입문강의  (1) 2023.10.10

댓글