테스트 케이스 작성

개발자·2022년 3월 1일
0

스프링

목록 보기
3/4
post-thumbnail

테스트 케이스

테스트 케이스는 개발한 기능을 실행해서 테스트를 할 때 자바의 Main 메소드를 통해 실행하거나, 웹 어플리케이션의 컨트롤러를 통해서 기능을 실행한다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기가 어렵고 여러 테스트를 한번에 실행하기가 어렵다는 단점이 존재한다.
따라서 JUnit이라는 프레임워크를 이용하여 테스트 케이스를 작성하고 테스트를 하도록 한다.

JUnit

자바에서 독립된 Unit Test를 지원해주는 프레임워크로 assert메서드로 테스트 케이스의 수행결과를 판별한다. @Test, @Before, @After 같은 지원 어노테이션을 제공하며 @Test 메서드가 호출될때 마다 새로운 인스턴스를 생성하여 독립적인 테스트가 이루어진다.

테스트 코드 작성

테스트 클래스는 반드시 public으로 선언
@Test 어노테이션을 선언한 메서드는 JUnit이 알아서 실행한다.
메소드 이름은 한글로 사용하여도 무방하다.

MemoryMemberRepository 테스트

package hello3.hellospring.repository;

import hello3.hellospring.domain.Member;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.assertj.core.api.Assertions.*;

public class MemoryMemberRepositoryTest {

    MemoryMemberRepository memoryMemberRepository = new MemoryMemberRepository();

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

    @Test
    public void save(){
        Member member = new Member();
        member.setName("spring");

        memoryMemberRepository.save(member);

        Member result = memoryMemberRepository.findById(member.getId()).get();
        assertThat(member).isEqualTo(result);
    }

    @Test
    public void findByName(){
        Member member1 = new Member();
        member1.setName("spring1");
        memoryMemberRepository.save(member1);

        Member member2 = new Member();
        member2.setName("spring2");
        memoryMemberRepository.save(member2);

        Member result = memoryMemberRepository.findByName("spring1").get();

        assertThat(result).isEqualTo(member1);
    }

    @Test
    public void findAll(){
        Member member1 = new Member();
        member1.setName("spring1");
        memoryMemberRepository.save(member1);

        Member member2 = new Member();
        member2.setName("spring2");
        memoryMemberRepository.save(member2);

        List<Member> result = memoryMemberRepository.findAll();

        assertThat(result.size()).isEqualTo(2);
    }
}

각 테스트별로 초기화를 해주기 위해 @AfterEach 어노테이션을 사용하였다.
테스트가 끝날때 마다 실행되는것으로 리포지토리 데이터베이스를 초기화 해주도록 구현하였다.

MemberService 테스트

package hello3.hellospring.service;

import hello3.hellospring.domain.Member;
import hello3.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;


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


class MemberServiceTest {

    MemberService memberService;
    MemoryMemberRepository memberRepository;

    @BeforeEach
    public void beforeEach(){
        memberRepository = new MemoryMemberRepository();
        memberService = new MemberService(memberRepository);
    }

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

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

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

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

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

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

        //when
        memberService.join(member1);
        assertThrows(IllegalStateException.class, ()-> memberService.join(member2));

//        try{
//            memberService.join(member2);
//            fail("테스트 실패");
//        }catch (IllegalStateException e){
//            assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
//        }
        //then
    }

    @Test
    void findMembers() {
    }

    @Test
    void findOne() {
    }
}

모든 테스트 케이스는 given, when, then으로 나누어서 하는것이 좋다.
ctrl + alt + t 를 이용하여 작성한 자바파일을 테스트코드로 바로 생성할 수 있다.

0개의 댓글