코드네임 JY

[스프링 입문] 테스트 코드 본문

백엔드 공부

[스프링 입문] 테스트 코드

영재임재영 2022. 12. 6. 15:46

미리보기

✅ 테스트 코드가 무엇인지 알아보자!

✅ JUnit 프레임워크에 대하여 알아보자!

✅ TDD(Test Driven Development)에 대하여 알아보자!


🎂 테스트 코드

코드를 신나게 다 작성하였다. 그대로 배포할 것인가? 아니다! 최소한의 검증 과정은 거쳐야 사람들에게 보여줄 수 있지 않나!

내가 개발한 기능이 의도한 대로 잘 동작하는지 검증하는 과정은 배포 과정에서 필수적이다.

 

그런데 이 테스트.. 어떻게 진행할건데..? 간단한 소규모의 코드는 main 메소드를 통해서 실행할 수 있다고 쳐도,

규모가 조금이라도 커지면 테스트를 준비하고 실행하는데 엄청 많은 코스트가 소요될 것이다.

 

따라서 자바에서는 'JUnit' 이라는 테스트 프레임워크로 이러한 문제를 해결할 수 있다!

테스트 코드를 사용하게 된다면, 위 폴더 구조와 같이 'test' 라는 폴더를 통해 사용할 수 있다!

🍧 JUnit

JUnit은 자바 언어용 단위 테스트 프레임워크이다.

 

스프링에서는 테스트를 진행하기 위해서 JUnit이라는 프레임워크를 사용한다.

build.gradle 파일에 아래와 같이 환경설정이 되어 있으면 사용할 수 있다!

 

테스트 코드를 돌려보기 위해서 활용하면 몇 가지 Annotation이 있는데, 이번 공부에서 주로 사용하였던 몇 가지만 설명하겠다!

 

@Test 테스트 메소드임을 알려줌
@BeforeEach 각 테스트 메소드의 진행 전에 실행되어야 함
@AfterEach 각 테스트 메소드가 진행되고 실행되어야 함

아래 코드는 스프링 강의 공부에 활용한 테스트 코드(MemberServiceTest.java) 중 한 부분인데,

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("hello");

    // when (이거를 실행했을 때)
    Long saveId = memberService.join(member);

    // then (이런 결과가 나와야 해)
    Member findMember = memberService.findOne(saveId).get();
    assertThat(member.getName()).isEqualTo(findMember.getName());
}

@BeforeEach가 붙은 메소드에서 하는 역할

✔️ 각 테스트 메소드가 진행되기 전에 Service와 Repository 객체를 불러온다는 뜻이다!

    (Service와 Repository 안에 있는 기능을 사용해야하니까!)

 

@AfterEach가 붙은 메소드에서 하는 역할

✔️ (현재 코드는 메모리를 DB 역할로 사용 중)

✔️ 각 테스트 메소드가 진행되는 사이사이에 데이터가 깔끔하게 정리되도록 Repository를 비워준다는 뜻이다!

 

@Test가 붙은 메소드에서 하는 역할

✔️ 실제로 테스트가 진행되는 메소드이다!

✔️ Given / When / Then 으로 구획을 나누는 이유는 깔끔하게 정리하기 위해서!

    - Given : 무언가가 주어졌는데 (Member 객체를 통해 새로운 회원을 만들어서 이름을 지정했는데)

    - When : 이거를 실행했을 때 (해당 회원을 회원 가입시켰을 때)

    - Then : 이런 결과가 나와야 해!! (테스트 코드 내에서 만든 회원과 실제 로직에서 돌아가는 회원 정보가 일치해야 해!!)

 

🌰 TDD (Test Driven Development)

강의에서 처음 테스트 코드를 작성할 때는, 관련 로직을 먼저 작성하고 그 다음에 테스트 코드를 작성하였다.

'로직 개발 → 테스트 코드 개발' 순서라는 것인데, 이 순서를 뒤바꿔 개발하는 것이 바로 'Test Driven Development' 이다!

 

'테스트 주도 개발' 은 테스트를 먼저 만들고 테스트를 통과하기 위한 것을 짜는 것인데,

코드를 작성하는 과정에서 먼저 테스트 코드를 작성하고 이를 통과하는 과정을 반복적으로 진행하는 과정이다.

 

현업에서도 많이 사용하시는 것 같고, TDD 관련된 주제로 시중에 책들도 많이 나와있다.

나는 아직 TDD를 통해 코드를 짜본 적이 없기 때문에 여기서는 간단하게 설명만 하고 넘어가겠다!

Comments