티스토리 뷰

단위테스트란?

단위테스트(Unit Test)는 가장 작은 하나의 모듈을 기준으로 독립적으로 진행 되는 테스트이다. 이는 하나의 클래스 혹은 메소드가 될 수 있다. 하나의 기능이 올바르게 동작하는지를 독립적으로 테스트 하는 것으로 어떤 기능을 실행했을 때 기대하는 결과가 나오는지 테스트하는 방법이다.

왜 작성해야 할까

작은 기능들이 하나 하나씩 모여 하나의 애플리케이션을 이루게 된다. 만약 기능들 중 하나라도 문제가 있다면 이는 애플리케이션 전체의 문제로 이어질 수 있다. 만약 단위테스트가 작성되었고 정상적으로 테스트를 통과한다면 다른 곳에서 이 기능을 가져다 쓸 때도 이미 테스트가 되었기에 이 기능에 대한 걱정은 하지 않아도 된다.

또한 단위테스트는 환경에 독립적으로 작성되기에 빠르게 실행할 수 있다는 장점이 있다. 모든 기능들을 테스트하는 통합테스트와 달리, 하나의 기능에 집중하며 의존하는 부분들은 가짜 객체(Mock)로 대체하여 온전히 본래의 기능에 집중할 수 있다.

또한 테스트 코드가 작성되어있다면 이후 기능을 확장할 때도 편리하다. 만약 새로운 기능을 추가 했는데 기존 기능이 잘 작동하는지 확인하려면 개발자가 직접 테스트하는 수 밖에 없다. 하지만 테스트가 작성되어 있다면 이 테스트를 돌려보는 것 만으로 내가 추가한 기능이 기존 기능을 해치지 않는지 쉽게 확인할 수 있다.

Junit5, AssertJ

자바에서 단위테스트를 위한 테스팅 프레임워크이다. 위 프레임워크들을 이용하면 테스트를 보다 쉽고 정확하게 할 수 있다.

테스트 작성

테스트를 어떻게 작성해야할 지 모르면 이렇게 작성해보자.

  • given : 이런 데이터가 주어졌을 때
  • when : 이런 함수를 실행하면
  • then : 이런 결과가 나와야 한다.

위 규칙에 맞게 작성하면 짜임새 있는 테스트를 작성할 수 있다.

import org.junit.jupiter.api.Test;

public class Example {

  @Test
  void test() {
    //given

    //when

    //then
  }
}

테스트는 이렇게 메소드 위에 @Test 어노테이션을 붙이면 된다.

다음은 nicknamecharacter 를 필드로 가지는 User 객체 생성에 대한 테스트이다.

    @Test
  @DisplayName("유저 생성")
  void createUser() {
    //given
    String nickname = "test";
    String character = "character1";

    //when
    User user = new User(nickname, chracter);

    //then
    assertThat(user.getNickname()).isEqualTo(nickname);
    assertThat(user.getCharacter()).isEqualTo(character);
  }

이런식으로 내가 입력한 값과, 메소드의 실행결과가 일치하는지 확인하면 된다.
위에서 사용한 assertThat 함수는 AssertJ 라이브러리를 임포트하여 사용할 수 있다. 이렇게 말이다.
import static org.assertj.core.api.Assertions.assertThat;

만약 테스트하고자 하는 클래스에서 의존하고 있는 객체가 있다면 이때는 가짜 객체(mock object)를 주입하여 다른 객체에 의존하지 않는 테스트를 만드는 것이 좋다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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
글 보관함