Develop/곤부📙

김영한 '스프링 입문' / 2

밀김 2023. 9. 14. 14:51
728x90

 

 

 

 

 

 

 

 

 

비즈니스 요구사항 정리

 

 

 

 

 

 

- 인터페이스(imp) 만드는 이유 : 아직 데이터 저장소가 선정되지 않아서 우선 인터페이스로 구현 클래스를 만들고 나중에 변경해서 갈아끼우려고 설계하는것

 

 

 

 

 

 

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

 

 

- Optional : nell을 감싸서 반환해주는 Wrapper클래스이다

 

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<>();
//long 형태의 변수 시퀀스 초기화하기..
private static long sequence = 0L;

@Override
public Member save(Member member) {
//멤버에 id값을 세팅해주면서 하나씩 증가
member.setId(++sequence);
//스토어 객체에 +1씩된 member의 아이디를 넣어줌
store.put(member.getId(), member);
return member;
}

@Override
public Optional<Member> finById(Long id) {
//id값이 null일수도 있기 때문에 옵셔널로 감싸서 반환하기
return Optional.ofNullable(store.get(id));
}

@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
//멤버의 네임이 파라미터로 넘어온 네임과 같을시에만 필터링이 된다
.filter(member -> member.getName().equals(name))
.findAny();
}

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

이렇게 하면 비즈니스로직 작성 끝~ 하고 테스트케이스 돌려주면서 실제로 잘 구동되는지 확인하면 된다

 

 

 

 

 

 

 

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

 

 

 

Assertions.assertEquals : 테스트돌릴때 사용하는 메서드중 하나로, 두개 인자의 값을 비교한다

Assertions.assertEquals(예상한값,실제나온값)

assertThat(비교대상).isEqualsTo(비교대상); 요즘은 이렇게 많이 쓴다고 한다

 

 

import static org.assertj.core.api.Assertions.*;

assertThat 임포트문

 

assertThat(result.size()).isEqualTo(3);

이렇게 객체의 사이즈도 테스트 돌려볼수있다

 

 

 

- 여러개의 테스트 메서드를 한번에 돌릴때 메서드 순서가 뒤죽박죽이기때문에 하나의 테스트가 끝나면 클리어해주는작업을 해줘야한다

    public void clearStore(){
        store.clear();
    }
    // 레포지토리에 이 메서드 만들어주고
    
       @AfterEach
    public void afterEach(){
        repository.clearStore();
    }
    //테스트레포지토리에 이 메서드를 만들어주면 메서드 여러개를 한꺼번에 실행해도 오류가 안남

 

 

 

 

테스트주도개발 tdd : 테스트를 먼저만드는것

 

 

 

 

 

 

 

728x90