티스토리 뷰

개발

[Spring Boot] 테스트 케이스 작성하기

호호홍얍얍 2022. 5. 25. 16:44

스프링에서는 @Test 어노테이션으로 테스트 케이스를 작성할 수 있게 돕는다.

어노테이션을 활용하면, 개별 메서드를 실행할 수 있게 해주어 메인 메서드에서 실행하는 것보다 훨씬 빠르고 쉽게 테스트를 진행할 수 있다.

테스트 파일은 자동으로 생성된 테스트 폴더 아래에서 수행하며, 패키지 구조, 파일명은 메인과 맞추는 것이 일반적이라고 한다.

 

Optoinal<Type>

옵셔널 클래스는 자바 8부터 도입되어 null 값인 경우에도 값을 반환할 수 있도록 해준다.

클래스를 옵셔널로 감싸면 옵셔널 클래스가 되고, 이를 꺼낼 때 ofNullable로 꺼내면 null 값을 넣을 수 있도록 해주고, of 로 꺼내면 에러를 NullPointException이 발생한다.

@Override
public Optional<Member> findById(Long id) {
    return Optional.ofNullable(store.get(id));
}

옵셔널 클래스의 값을 꺼내기 위해서는 get()을 사용한다.

@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);
}

그런데 바로 get()으로 꺼내는 것은 권장하지 않고, orElseGet()으로 꺼내어, 값이 없으면 디폴트 값을 지정하여 꺼내는 것을 더 추천한다고 한다.

(이외에도 orElse()를 사용할 수도 있는데, orElse()는 인자로 값을 받아, 메서드를 인자로 넣으면 실행한 후의 값을 넣어주고 그것으로 null 판별을 한다는 것 같은데 잘 이해가 되지 않으므로, 아직은 있다는 것 정도만 알고 있도록 한다.)

 

AssertJ assertThat

AssertJ는 값 검증을 위해 사용되는 라이브러리이며, 스태틱으로 임포트하여 사용하면 assertThat 메서드를 바로 활용할 수 있다.

JUnit보다 가독성이 좋아 잘 사용된다고 한다.

assertThat 메서드는 actual 타입에 따라 Assert 클래스를 반환하며, 그 클래스는 타입에 맞는 Assertion 메서드를 제공한다.

각 메서드는 반환 타입이 SELF여서, 메서드 체이닝 패턴으로 로직 작성이 가능하다.

assertThat(actual).isEqualTo(expected)와 같이 사용이 가능하여 글을 읽는 순서대로 코드를 읽을 수 있어 직관적이다.

import static org.assertj.core.api.Assertions.assertThat;
//public static AbstractAssert<SELF, T> assertThat(T actual)
@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);
}

* 공식문서: https://www.javadoc.io/doc/org.assertj/assertj-core/latest/org/assertj/core/api/Assertions.html

 

 

@AfterEach

각 테스트 메서드의 순서는 보장되지 않는다.

그래서 여러 개의 메서드를 실행했을 때, 메서드마다 저장소에 테스트 케이스를 삽입하여 오류가 날 수 있다.

각각의 메서드를 독립적으로 굴려야 하므로, 각 메서드가 종료되었을 때 저장소를 비워주는 메서드를 별도로 만들어 수행하는 것이 좋다.

이때 사용하는 것이 @AfterEach이다. @AfterEach는 메서드가 종료될 때마다 실행된다.

 

TDD

테스트 주도 개발

구현 클래스를 만들기 전에 미리 테스트를 만들어놓고 진행

 

 

* 인프런 스프링 입문(김영한) 강의 공부

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함