JAVA/Spring Boot

(Spring Boot) 테스트 코드 작성 방법

ri5 2021. 6. 19. 14:58

- 테스트 해볼 코드들.

※ 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("이미 존재하는 회원입니다");