JUnit 테스트 시작하기

Junit 테스트에 대해서 알고 있는 java 개발자 분들이 많을 것이다. 개발자들 사이에서 단위 테스트(Unit Test)가 중요하다는 말을 쉽게 들을 수 있다. Java 개발자가 JUnit 테스트의 첫 발을 뗄 수 있도록 돕기 위해 이 글을 작성했다. 시작이 반이다. 일단 시도해보길 권한다. “Hello World!” 출력으로 코딩을 시작했던 것처럼 가볍게 시작하자. 경력 채용 공고들을 살펴보면 많은 개발팀에서 단위 테스트 작성에 능숙한 팀원을 찾고 있다는 사실을 알 수 있다. 이 또한 우리가 단위 테스트를 공부해야 하는 이유 중 하나이며, 기본적으로 갖추어야 할 역량이라고 볼 수 있다. 중요한 건 알고 있었지만 시작하는 방법을 몰랐다면 이 글이 도움이 될 것이다.

단위 테스트를 해야 하는 이유

소프트웨어의 품질 향상을 위해 단위 테스트는 선택이 아닌 필수다. ‘잘 작성된’ 단위 테스트는 결함을 빠르게 찾을 수 있도록 도와주며 리팩토링을 가능하게 한다. 이는 고품질 소프트웨어의 기본적인 요소이다. 좋은 품질의 소프트웨어는 읽기 쉽고 고치기 쉽다. 읽기 쉽고 고치기 쉬우면 유지 보수 비용이 줄어든다. 유지 보수 비용이 작은 프로젝트는 그렇지 않은 프로젝트에 비해 성공할 확률이 높다. 그래서 우리는 단위 테스트를 작성해야 한다. 단위 테스트 작성에 너무 많은 시간이 소요된다고 생각할 수도 있다. 그러나 조금만 길게 보면 단위 테스트 작성이 결국 더 큰 비용을 줄여준다. 커다란 변경이 자주 일어나는 프로젝트의 초반보다는 중반 이후부터 단위 테스트가 더욱 중요해진다. 마음을 열고 공부하다 보면 머지 않아 필자의 말이 억지가 아니라는 사실을 깨닫는 날이 올 것이다.

우리는 프로다. 어떤 상황에서도 높은 가치를 제공하는 것을 목표로 해야 한다. 좋은 단위 테스트를 작성하는 역량은 개발자의 기본기와 같다. 농구나 축구를 잘 하기 위해 기본 자세를 연습하듯 우리는 단위 테스트를 기본기로 여기고 좋은 습관을 들이기 위해 노력해야 한다. 오늘 그 첫 발을 내딛어 보자.

테스트 코드를 작성하는 이유(테스트 자동화) 👈click!!

Junit 테스트란?

JUnit은 개발자가 Java로 구현한 프로그램을 쉽고 빠르게 테스트 할 수 있도록 돕는 테스트 자동화 프레임워크이다. 작성한 코드에 대한 실행 결과가 예상 결과와 일치하는지 확인함으로써 동작을 검증한다. 예를 들면, add(1, 1)의 결과가 2일 거라고 예상했는데 add(1, 1)이 3을 반환한다면 add 메서드에 뭔가 문제가 있음을 알 수 있다.

참고로 최신 버전은 junit 5이다. 이제 간단히 Junit 테스트를 작성하는 방법을 알아보겠다.

다운로드 및 설정 방법

gradle, maven 환경

  1. 링크로 이동한다.
    junit4: https://github.com/junit-team/junit4/wiki/Download-and-Install
    junit5: https://junit.org/junit5/docs/current/user-guide/#overview-getting-started
  2. gradle, maven 등 환경에 맞는 설치 방법을 따른다.
  3. 의존성 추가 후 sync하여 프로젝트에 반영한다.

빌드 툴 미사용 환경 (IntelliJ 기준)

  1. 링크로 이동한다.
    junit4: https://github.com/junit-team/junit4/wiki/Download-and-Install
  2. 두 개의 jar 파일을 다운로드 받아 원하는 폴더에 저장한다.
    (junit.jar, hamcrest-core.jar)
  3. 사용 중인 IDE의 Project에서 해당 라이브러리를 사용하도록 설정한다. (아래 스크린샷 참고)
JUnit-다운로드-1
1. Open Module Settings 클릭
JUnit-다운로드-2
2. Java Libraties 추가
JUnit-다운로드-3
3. 두 jar 파일 선택 후 OK
JUnit-다운로드-4
4. OK
JUnit-다운로드-5
5. OK

Hello JUnit !

Junit 테스트 코드 작성하기

제대로 동작하는지 확인하기 위해 간단한 테스트 코드를 작성한다.

import org.junit.Assert;
import org.junit.Test;

public class JunitTest {

    @Test
    public void string_is_concatenated() {
        String str1 = "Target";
        String str2 = "Coders";

        String result = str1.concat(str2);

        Assert.assertEquals("TargetCoders", result);
    }
}

String 객체의 concat 메서드를 테스트하는 코드이다. 한 번 실행해보는 게 목적이니 클래스를 만들고 위 코드를 복사해서 붙여 넣자.

또 다른 테스트 코드 예시를 보고 싶으면 HashMap 이해하기 (👈click!!) 게시글의 목차 중 StudentTest.class을 참고하라.

Junit 테스트 실행하기 (IntelliJ 기준)

IntelliJ에서 테스트를 실행하는 쉬운 방법이 두 가지 있다.

방법 1. 아래 사진처럼 class, method 선언 옆에 표시된 아이콘(재생 모양)을 클릭하여 Run ‘JunitTest’을 선택한다.

  • 재생 아이콘 두 개
    : 해당 클래스 내부의 테스트 메서드를 모두 실행
  • 재생 아이콘 한 개
    : 해당 테스트 메서드 하나만 실행
클릭으로 테스트 실행하기

방법 2. 코드에서 원하는 위치를 클릭하여 커서가 깜빡이는 상태로 만든 후 Ctrl+Shifr+F10 단축키를 누른다.

  • 단축키 누를 때 커서의 위치
    • 클래스 내부 && 메서드 외부
      : 해당 클래스 내부의 테스트 메서드를 모두 실행
    • 각 테스트 메서드 내부
      : 해당 테스트 메서드만 실행

Junit 테스트 결과 확인

테스트 결과는 IDE 하단에 아래와 같이 표시된다.

Junit 테스트 결과 확인(성공)
테스트 성공

아무런 에러 메시지가 표시되지 않으며 하나의 테스트가 pass되었음을 알려준다.

테스트에 실패하면 어떻게 될까? 만약 Assert.assertEquals(“TargetCoders”, result); 를 Assert.assertNotEquals(“TargetCoders”, result); 로 변경해서 실행하면 아래와 같은 결과를 볼 수 있다.

Junit 테스트 결과 확인(실패)
테스트 실패

result.equals(“TargetCoders”)의 결과가 False일 것으로 예상했지만 실제 결과는 True가 되어 테스트에 실패했다.

스스로 경험하며 얻은 깨달음을 공유하기 좋아하며, 세상이 필요로 하는 코드를 작성하기 위해 노력하는 개발자입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다