[Eclipse] JUnit 알아보기: 설치 & 활용

Ma_Seokjae·2024년 5월 3일
0
post-thumbnail

안녕하세요. 오늘은 Java 기반 프로젝트에서 JUnit을 활용한 단위 테스트에 대해 자세히 알아보겠습니다. 이를 통해 보다 효율적으로 프로그램을 테스트하고, 시간을 관리하며, 코드 최적화를 해보도록 합시다.

JUnit 설치 전, 먼저 eclipse를 설치합니다.

[eclipse 설치 관련]
for Mac:
https://yeomss.tistory.com/311

for Windows:
https://code-lab1.tistory.com/379#google_vignette


JUnit 설치

1. Workspace에 Java Project 생성

2. 프로젝트 Root에서 마우스 오른쪽 클릭 후 Properties 클릭

3. Add Library 클릭

4. JUnit 클릭

4.1. JUnit ver 설정

4.2. JUnit 설정 완료

이렇게 순서대로 진행하면 JUnit 플러그인 설치가 완료됩니다


간단한 실습 예제

시나리오:

Calculator.java라는 class는 두가지 숫자 인자(num1, num2)를 전달 받아서 해당 숫자를 곱해서 결과를 return 해주는 mult()라는 함수를 지니고 있습니다.
이 객체가 원할하게 곱하기 역할을 수행하는지 확인하기 위해서 CalculatorTest.java라는 테스트 케이스 객체를 생성하여 어떻게 JUnit을 설정하고 사용하는지 간단한 예제를 통해 이해하는 시간을 가져보도록 하겠습니다.

우선, 이전에 생성했던 Java Project 파일에 있는 src 디렉토리에 위치하며 시작합니다.

1. 테스트 진행을 위한 디렉토리 생성

  • JunitTest 라는 디렉토리 생성

  • 테스트를 위한 Calculator.java 클래스 생성

    // Caculator.java code
    package junitTest;
    
    public class Calculator {
        public int mult(int num1, int num2) {
            int result = num1 * num2;
            return result;
        }
    }

2. 생성한 클래스 테스트 케이스 생성

  • 'Calculator.java' 파일에서 마우스 우클릭
  • 'New' 클릭
  • 하단에 'JUnit Test Case' 클릭

2.1. 검색창에 JUnit 검색

  • 'JUnit Test Case' 클릭
  • 'Next' 버튼 클릭

2.2. Name 설정 후 종료

  • 예제에서는 CalculatorTest로 Name 설정

혹시, 'Class under test:'가 비어있다면

  • 'Browse' 버튼 클릭
  • 테스트 하고자 하는 클래스 검색 후 선택
  • 적용 완료

3. 테스트케이스 클래스 생성 확인

이제 생성된 기본 틀의 테스트케이스 클래스에 다음과 같은 코드로 수정해줍니다.
  • 수정된 CalculatorTest.java

    package junitTest;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    import org.junit.jupiter.api.Test;
    
    class CalculatorTest {
    
        @Test
        void testMultiplication() {
            Calculator calculator = new Calculator();
            assertEquals (12, calculator.mult (3, 5));
        }
    }

    이 테스트 케이스에서는 테스트 하고자 하는 Calculator.java의 객체를 생성하여 해당 객체의 mult 함수에 인자로 3과 5를 전달했을 때, return value가 12인가에 대해서 테스트 하는 코드입니다.

[중간 설명]
여기서 사용된 JUnit 테스트 케이스 코드를 통해 구조를 이해하는 시간을 가져보도록 하겠습니다.

  • package 선언:
    package junitTest;
    • 테스트 코드를 포함하는 패키지를 선언합니다.
  • import 문:
    import staticorg.junit.jupiter.api.Assertions.*;
    • JUnit 프레임워크의 Assertions 클래스를 정적으로 import합니다. 이를 통해 Assertions 메서드를 직접 호출할 수 있습니다.
  • 테스트 클래스 선언:
    class CalculatorTest
    • 테스트할 기능을 포함하는 클래스를 선언합니다.
  • 테스트 메서드 선언:
    @Test
    • 테스트 메서드임을 나타내는 JUnit 어노테이션입니다.
    • 테스트 메서드는 void 타입이어야 하며, 매개변수를 받지 않습니다.
  • 테스트 메서드 이름:
    void testMultiplication()
    • 테스트 메서드의 이름은 일반적으로 테스트할 기능을 나타내는 이름을 사용합니다.
  • 테스트 대상 생성:
    Calculator calculator = new Calculator();
    • 테스트할 대상 객체(Calculator)를 생성합니다.
  • 테스트 단언(Assertion):
    assertEquals(12, calculator.mult(3, 5));
    • 예상 결과(12)와 실제 결과(calculator.mult(3, 5))를 비교하여 테스트를 수행합니다.
    • 이 예제 코드의 경우 3과 5를 곱한 결과가 12인지 확인합니다.

4. 테스트 케이스 실행

  • 생성한 Java Project root에서 마우스 우클릭
  • 'Run As' 클릭
  • 'JUnit Test' 클릭

5. 실행 결과

테스트 케이스가 실패했다고 결과가 뜹니다.
왜냐하면, 이전에 테스트 케이스에서는 3과 5를 곱하면 12일 것이라고 했지만, 당연히 12가 아니라 15이기 때문입니다.

이 오류 내용은 아래보면 Failure Trace를 통해 어떤 부분에서 문제가 생기고 있는지 보다 자세히 알수 있어서 굉장히 편리하게 해당 객체가 잘 작성되고 문제가 있다면 왜 문제가 있는지 알 수 있습니다.

따라서, 오류에서 지적해준 것과 같이 테스트 케이스에서 3과 5를 곱하면 15일 것이라고 코드를 수정하면

이처럼 테스트 케이스가 성공하는 것을 확인할 수 있습니다 :)


⚠️ 주의 사항: 단위 테스트의 올바른 사용법

위 예제에서는 단순한 실습을 위해 의도적으로 잘못된 예상값(12)을 설정하여 테스트가 실패하는 모습을 보여주었습니다. 그러나 실제 단위 테스트에서는 예상값을 잘못 설정하면 오히려 코드의 정상적인 동작을 확인하기 어렵고, 잘못된 테스트로 인해 오류를 판단하는 데 혼란이 생길 수 있습니다.

✔️ 올바른 단위 테스트 작성 방법

  1. 예상값은 정확한 값으로 설정해야 합니다.
    • 예제에서 assertEquals(12, calculator.mult(3, 5))처럼 잘못된 예상값을 설정하는 것은 올바르지 않습니다.
    • 정확한 검증을 위해 assertEquals(15, calculator.mult(3, 5))로 설정해야 합니다.
  2. 의도적으로 실패하는 테스트는 특정한 목적을 가질 때만 사용해야 합니다.
    • 예를 들어, 새로운 기능 추가 전후로 기존 기능이 유지되는지 검증하거나, 일부러 실패하는 테스트를 작성하여 특정 예외 처리가 동작하는지 확인하는 경우가 있습니다.
    • 하지만 일반적인 단위 테스트에서는 정확한 예상값을 설정하여 올바른 동작을 보장해야 합니다.
  3. 테스트 결과를 정확하게 해석해야 합니다.
    • 테스트 실패의 원인이 예상값 설정 오류인지, 실제 코드의 버그인지 명확히 구분해야 합니다.
    • Failure Trace에서 오류 메시지를 분석하는 습관을 기르는 것이 중요합니다.

따라서, 실제 단위 테스트에서는 아래와 같이 정확한 예상값을 설정해야 합니다:

@Test
void testMultiplication() {
    Calculator calculator = new Calculator();
    assertEquals(15, calculator.mult(3, 5)); // 올바른 예상값을 설정
}

이처럼 단위 테스트는 단순히 테스트를 실행하는 것뿐만 아니라, 정확한 검증 기준을 설정하고, 테스트 결과를 올바르게 해석하는 것이 중요합니다.

profile
Why not change the code?

0개의 댓글

관련 채용 정보