- 테스트 해볼 코드들.
※ repository
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);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.of(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() {
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
}
}
※ service
public class MemberService {
private final MemberRepository memberReposoitory = new MemoryMemberRepository();
//회원 가입
public Long join(Member member) {
extracted(member);
memberReposoitory.save(member);
return member.getId();
}
private void extracted(Member member) {
memberReposoitory.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다");
});
}
// 전체 회원 조회
public List<Member> findMembers() {
return memberReposoitory.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberReposoitory.findById(memberId);
}
}
1. 테스트 코드 작성.
- 테스트 코드를 작성 할땐 given, when, then을 생각하자
▣ given: 준비하는 과정(데이터를 생성하거나 준비해야할 객체를 정의하는 등의 테스트를 준비하는 과정)
//given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
▣ when: 실행해봐야할 메서드나 이벤트등을 직접 실행하는 단계
//when
memberService.join(member1);
▣ then: 실행된 결과를 검증하는 단계
//then
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다");
'JAVA > Spring Boot' 카테고리의 다른 글
(스프링) jdbc, jdbcTemplate 차이. (0) | 2021.06.23 |
---|---|
(Spring Boot)@GetMapping과 @PostMapping (0) | 2021.06.19 |
(Spring Boot) @ResponseBody 동작 원리 (0) | 2021.06.18 |
스프링부트 구글 로그인 환경 설정하기 (0) | 2021.03.31 |
(프로젝트 진행) 스프링 부트로 게시글 조회 페이지 만들기. (0) | 2021.03.26 |