IMCAT.DEV
로그인 가입
Java 중급 테스트

Java JUnit을 이용한 단위 테스트

Java JUnit을 이용한 단위 테스트 — 중급

JUnit을 이용한 단위 테스트

1. 도입 (왜 배워야 하는가)

소프트웨어 개발에서 품질 보증은 필수적인 과정입니다. JUnit은 Java에서 가장 많이 사용되는 단위 테스트 프레임워크로, 코드의 정확성과 안정성을 보장하는 데 큰 역할을 합니다. 단위 테스트를 통해 개발자가 작성한 코드가 예상대로 작동하는지 확인할 수 있으며, 이는 버그를 조기에 발견하고 수정하는 데 도움을 줍니다.

만약 JUnit을 사용하지 않고 개발한다면, 코드 변경 시 기존 기능에 대한 영향을 검증하기 어려워져, 나중에 발생하는 버그를 발견하는 것이 어려워질 수 있습니다. 이는 개발 후반부에 많은 시간과 비용을 초래할 수 있습니다. 따라서 JUnit을 통한 단위 테스트는 소프트웨어 품질을 유지하는 데 매우 중요합니다.

2. 핵심 개념 설명

단위 테스트(Unit Test)

단위 테스트는 소프트웨어의 각 구성 요소(예: 함수, 메서드 등)를 개별적으로 검증하는 테스트입니다. 마치 학생이 시험을 보듯이 각 부분을 따로따로 점검하는 것과 유사합니다.

JUnit

JUnit은 Java 언어로 작성된 단위 테스트를 위한 프레임워크로, 테스트 클래스와 메서드를 작성하는 데 필요한 여러 가지 어노테이션과 메서드를 제공합니다.

용어설명
@Test메서드가 테스트 메서드임을 나타내는 어노테이션
assertEquals두 개의 값이 같은지 비교하는 메서드
setUp각 테스트 메서드 실행 전 공통으로 수행할 코드를 정의하는 메서드

3. 기본 코드 예제

가장 간단한 JUnit 테스트 예제를 살펴보겠습니다.

import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class CalculatorTest {
    
    // 메서드가 실행되기 전에 호출됨
    @Test
    public void testAdd() {
        Calculator calculator = new Calculator();
        // 2 + 3의 결과가 5인지 확인
        assertEquals(5, calculator.add(2, 3));
    }
}

class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

실행 결과

테스트가 성공적으로 통과했습니다.

코드 한 줄씩 동작 설명

  1. import org.junit.Test; - JUnit의 Test 어노테이션을 가져옵니다.
  2. import static org.junit.Assert.assertEquals; - assertEquals 메서드를 정적 임포트하여 사용합니다.
  3. public class CalculatorTest { - 테스트 클래스를 정의합니다.
  4. @Test - 이 메서드가 테스트 메서드임을 표시합니다.
  5. public void testAdd() { - 실제 테스트 메서드입니다.
  6. Calculator calculator = new Calculator(); - Calculator 객체를 생성합니다.
  7. assertEquals(5, calculator.add(2, 3)); - add 메서드의 결과가 5인지 확인합니다.
  8. 4. 실전 활용 예제

    예제 1: 쇼핑몰 장바구니

    쇼핑몰에서 장바구니에 상품을 추가하는 기능을 테스트하고 싶다면 다음과 같은 테스트를 작성할 수 있습니다.

    @Test
    public void testAddItemToCart() {
        ShoppingCart cart = new ShoppingCart();
        Item item = new Item("Laptop", 1000);
        cart.addItem(item);
        assertEquals(1, cart.getItemCount());
    }

    예제 2: 사용자 로그인 기능

    사용자가 올바른 자격증명으로 로그인할 수 있는지를 테스트합니다.

    @Test
    public void testUserLogin() {
        UserService userService = new UserService();
        assertTrue(userService.login("username", "password"));
    }

    5. 흔한 실수와 주의사항

    실수 1: 테스트 메서드 이름을 잘못 설정하기

    JUnit은 메서드 이름으로 테스트를 구분하므로, 명확한 이름을 사용하는 것이 중요합니다.

    • 잘못된 코드
    • @Test
      public void test() { ... }
    • 올바른 코드
    • @Test
      public void testAdd() { ... }

      실수 2: assert문을 사용하지 않기

      테스트 메서드에서 assert문을 사용하지 않으면 항상 통과하는 테스트가 되어버립니다.

    • 잘못된 코드
    • @Test
      public void testAdd() {
          // 아무것도 검증하지 않음
      }
    • 올바른 코드
    • @Test
      public void testAdd() {
          assertEquals(5, calculator.add(2, 3));
      }

      6. 정리

    • JUnit을 사용하면 코드의 품질을 높일 수 있으며, 버그를 조기에 발견할 수 있습니다.
    • 각 테스트는 독립적이어야 하며, 명확한 이름을 가져야 합니다.
    • assert문을 사용하여 예상 결과와 실제 결과를 비교해야 합니다.

다음에 학습하면 좋은 주제는 Mockito를 이용한 Mock 객체 활용, 또는 통합 테스트에 대한 이해입니다.