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());
}
}
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