초코딩(chocoding)

[Spring Boot] 테스트 케이스 작성하기 / 테스트 코드란? / 테스트 코드 실패 원인 / 테스트 코드 순서 본문

SpringBoot

[Spring Boot] 테스트 케이스 작성하기 / 테스트 코드란? / 테스트 코드 실패 원인 / 테스트 코드 순서

sweetychocoding 2024. 4. 4. 16:26
728x90

테스트 코드(Test Code)란?

=> 소프트웨어의 기능과 동작을 테스트 하는데 사용하는 코드로,

     소프트웨어의 결함을 찾아내고 수정하는 과정에서 매우 중요한 작업이다.

=> 개발자가 작성한 코드를 실행하고 예상된 결과가 정상적으로 나오는지 확인하는데 사용된다.

 

=> 개발자는 테스트 코드를 작성함으로써, 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있고,

     코드 수정이 필요한 상황에서 유연하고 안정적인 대응을 할 수 있다. 이는 곧 서비스의 품질 및 안정성과 직결되어 있다.

 

 

.

.

.

 

 

package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.junit.jupiter.api.Test;

import java.util.List;

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

class MemoryMemberRepositoryTest {
    MemoryMemberRepository repository = new MemoryMemberRepository();

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

        repository.save(member);

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

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

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

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

        assertThat(result).isEqualTo(member1);
    }

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

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

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

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

 

 

테스트 코드 하나씩 돌릴 때는 문제 없었던 것이 전체 테스트 코드를 돌리니까 에러가 떴다.

그 이유는 ...

 

테스트 코드는 순서를 보장하지 않는다.

즉, 내가 작성한 순서대로 테스트 코드가 작동하지 않는다는 것이다.

 

따라서 모든 테스트는 순서와 상관없이 메서드 별로 따로 동작하게 설계해야 한다.

 

 

 

위에 에러를 해결하기 위해서 한 메서드가 동작이 끝나면 데이터를 클린해주는 코드를 추가로 작성하였다.

    public void clearStore() {
        store.clear();
    }
    @AfterEach
    public void afterEach() {
        repository.clearStore();
    }

 

 

 

 

 

 

 

 

 

 


느낀점

=> 국비지원 수업을 들을 당시에 테스트 코드의 중요성을 강사님께 들었었다. 하지만 팀 프로젝트의 마감기한에 쫓겨 코드를 짜다보니 자연스럽게 테스트 코드를 작성하지 못하게 되었다.

이번 기회에 테스트 코드를 작성해볼 수 있어서 좋았고, 테스트 코드의 필요성, 작성법 등등 많은 정보들을 구글링하며 새로운 지식들을 많이 접했다.

728x90