안녕하세요. 오늘은 Java 기반 프로젝트에서 JUnit을 활용한 단위 테스트에 대해 자세히 알아보겠습니다. 이를 통해 보다 효율적으로 프로그램을 테스트하고, 시간을 관리하며, 코드 최적화를 해보도록 합시다.
JUnit 설치 전, 먼저 eclipse를 설치합니다.
[eclipse 설치 관련]
for Mac:
https://yeomss.tistory.com/311
for Windows:
https://code-lab1.tistory.com/379#google_vignette
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. 생성한 클래스 테스트 케이스 생성
2.1. 검색창에 JUnit 검색
2.2. Name 설정 후 종료
혹시, 'Class under test:'가 비어있다면
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 junitTest;
import staticorg.junit.jupiter.api.Assertions.*;
class CalculatorTest
@Test
void testMultiplication()
Calculator calculator = new Calculator();
assertEquals(12, calculator.mult(3, 5));
4. 테스트 케이스 실행
5. 실행 결과
테스트 케이스가 실패했다고 결과가 뜹니다.
왜냐하면, 이전에 테스트 케이스에서는 3과 5를 곱하면 12일 것이라고 했지만, 당연히 12가 아니라 15이기 때문입니다.
이 오류 내용은 아래보면 Failure Trace를 통해 어떤 부분에서 문제가 생기고 있는지 보다 자세히 알수 있어서 굉장히 편리하게 해당 객체가 잘 작성되고 문제가 있다면 왜 문제가 있는지 알 수 있습니다.
따라서, 오류에서 지적해준 것과 같이 테스트 케이스에서 3과 5를 곱하면 15일 것이라고 코드를 수정하면
이처럼 테스트 케이스가 성공하는 것을 확인할 수 있습니다 :)
위 예제에서는 단순한 실습을 위해 의도적으로 잘못된 예상값(12)을 설정하여 테스트가 실패하는 모습을 보여주었습니다. 그러나 실제 단위 테스트에서는 예상값을 잘못 설정하면 오히려 코드의 정상적인 동작을 확인하기 어렵고, 잘못된 테스트로 인해 오류를 판단하는 데 혼란이 생길 수 있습니다.
assertEquals(12, calculator.mult(3, 5))
처럼 잘못된 예상값을 설정하는 것은 올바르지 않습니다.assertEquals(15, calculator.mult(3, 5))
로 설정해야 합니다.Failure Trace
에서 오류 메시지를 분석하는 습관을 기르는 것이 중요합니다.따라서, 실제 단위 테스트에서는 아래와 같이 정확한 예상값을 설정해야 합니다:
@Test
void testMultiplication() {
Calculator calculator = new Calculator();
assertEquals(15, calculator.mult(3, 5)); // 올바른 예상값을 설정
}
이처럼 단위 테스트는 단순히 테스트를 실행하는 것뿐만 아니라, 정확한 검증 기준을 설정하고, 테스트 결과를 올바르게 해석하는 것이 중요합니다.