순서
비즈니스 요구사항 정리
회원 도메인과 리포지토리 만들기
회원 리포지토리 테스트 케이스 작성
회원 서비스 개발
회원 서비스 테스트 만들기
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 |
---|
댓글