본문으로 바로가기
반응형

 

 

 

기존 클래스들의 작성은

 

아래 링크에 순차적으로 작성되어있다.

 

 


● 회원관리 예제 - 백엔드 개발

 

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

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

   3. 회원 서비스 개발

   4. 회원 서비스 테스트

 





 

 

 

개발한 기능을 실행해서 테스트할 때

자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다.

 

 

 

이러한 방법은 준비하고 실행하는데 오래 걸리고,

(system.out.println() 으로 다 된다!!)

반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다.

 

 

 

 

자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.

 

 

 

 

테스트 케이스 작성은 이전 포스팅에서 다룬 

회원 서비스 개발에서 회원 가입과 중복회원 검사를 구현하고자 한다.

 

 

https://healthdevelop.tistory.com/entry/spring14

 

[Spring boot] 스프링 회원 서비스 - 중복 회원 검사 | 전체 회원 조회 | 회원 조회

기존 클래스들의 작성은 아래 링크에 순차적으로 작성되어있다. ● 회원 서비스 개발 MemberService.java package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellosprin..

healthdevelop.tistory.com

 

 

 

 

 

 

 


● 테스트 케이스 작성  

 

 

 

 

 

MemberServiceTest.java

package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;

class MemberServiceTest {

    MemberService memberService;
    MemoryMemberRepository memberRepository;

    // test 수행전에
    @BeforeEach
    public void beforeEach() {
        memberRepository = new MemoryMemberRepository(); // memberRepo 하나 생성
        memberService = new MemberService(memberRepository); // 위 repo를 service의 Repo와 공유
    }

    @AfterEach
    public void afterEach() {
        memberRepository.clearStore();
    }

    @Test
    void 회원가입() {
        //given
        Member member = new Member();
        member.setName("hello");

        //when
        Long savedId = memberService.join(member);

        //then
        Member findMember = memberService.findOne(savedId).get();
        assertThat(member.getName()).isEqualTo(findMember.getName());
    }

    @Test
    public void 중복_회원_예외() {
        //given
        Member member1 = new Member();
        member1.setName("spring");

        Member member2 = new Member();
        member2.setName("spring");

        //when
        memberService.join(member1);
        // memberService.join(member2) 이 로직을 실행할건데,IllegalStateException.class 이 예외가 발생해야해
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));

        assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");

        /* try-catch 방법
        try {
            memberService.join(member2);
            fail();
        } catch (IllegalStateException e){
            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
        }
        */
        //then
    }

    @Test
    void findMembers() {
    }

    @Test
    void findOne() {
    }
}

 

중복_회원_예외를 보면

   이름이 같은 두 회원을 생성하고, member1을 먼저 join(가입)시켰다.

   

   그 후에 같은 이름을 가진 member2를 가입시킬 때,

 

   assertThrows 메소드를 통해 

   memberservice에서 작성한 중복일 때에 예외(IllegalStateException)가 발생한다면

 

   service에서 작성한 예외처리 메시지serviceTest에서 작성한 예외처리 메시지와 같은지 비교한다.

   

 

 

 

 

 

테스트를 수행해보면,,,

 

 

 

 

 

 

 

 

정상적으로 테스트 동작이 완료되었다.

반응형