- 소프트웨어 개발에서 개별적인 코드 단위를 테스트하는 것을 의미합니다. - 코드의 작은 부분을 격리시켜 독립적으로 테스트함으로써 코드의 정확성과 신뢰성을 검증합니다. - 자동화가 되고 반복 가능하며 버그를 빠르게 찾아내고 수정하는데 도움이 됩니다. 또한 코드 변경 시 기존 기능에 영향을 주지 않고 코드의 동작을 확인하는 데 유용합니다.
💡 단위 테스트의 범위
- 클래스, 메서드, 함수와 같은 작은 단위의 코드를 격리시켜 독립적으로 테스트하는 것을 의미합니다. - 따라서, 컨트롤러단이나 서비스단과 같은 구성 요소는 각각 개별적인 단위로 테스트될 수 있습니다
2) JUnit 5 반복 테스트
💡 JUnit 5 반복 테스트
- 이전까지 하나의 메서드에 대해 단일 테스트를 진행했다면, 단순 반복적 테스트 방법이나 파라미터 별 테스트 방법을 통해서 반복 테스트를 수행합니다. - 동일한 테스트를 여러 번 수행함으로써 예기치 않은 상황이나 경계 상황을 더 잘 검증할 수 있습니다. - 반복 테스트는 주로 @RepeatedTest와 @ParameterizedTest 애노테이션을 사용하여 구현합니다.
3) JUnit 5 반복 테스트: @RepeatedTest를 이용한 단순 반복 테스트
💡 @RepeatedTest
- 동일한 테스트 메서드를 지정된 횟수만큼 반복해서 실행할 수 있게 합니다. - 이는 특정 입력에 대해 테스트를 여러 번 수행하고 일관성 있는 결과를 보장하기 위해 유용합니다.
💡 @RepeatedTest 어노테이션을 이용한 예시 - @RepeatedTest(value = 5)의 값을 주어서 단순 5번 반복되는 테스트를 구성하였습니다.
public class RepeatableTest {
@DisplayName("덧셈 테스트")
@RepeatedTest(value = 5)
public void repeatedAddTest(TestInfo testInfo) {
// Arrange: 준비
Calculator myCalculator = new Calculator();
// Act: 행동
myCalculator.add(10.0);
// Assert: 단언 검증
Assertions.assertEquals(10.0, myCalculator.getResult());
// 현재 반복 횟수와 전체 반복 횟수를 출력
System.out.println(testInfo.getDisplayName());
}
}
1.2. @RepeatedTest 어노테이션을 이용한 결과
💡 @RepeatedTest 어노테이션을 이용한 결과
- 아래와 같이 5번 반복되어 수행이 됨을 확인하였습니다. 또한 모두 테스트에 통과하였습니다.
2. @RepeatedTest 어노테이션의 name 속성을 활용한 출력방법
💡 @Repeated 어노테이션의 name 속성을 활용한 출력방법
- @Repeated 어노테이션 내에는 name 속성이 존재하고, 이에 따라 반복되는 테스트에 대한 이름에 대해 정의를 합니다. - 기본적으로 "repetition {currentRepetition} of {totalRepetitions}” 형태로 정의되고 출력되지만, 사용자가 원하는 데로 출력이 가능합니다.
💡 name 속성에서 사용되는 변수 값
변수
설명
{displayName}
테스트 메서드의 표시 이름을 의미합니다
{currentRepetition}
현재 반복 횟수를 의미합니다
{totalRepetitions}
전체 반복 횟수를 의미합니다
2.1. @RepeatedTest 어노테이션의 name 속성을 응용한 예시
💡 @RepeatedTest 어노테이션의 name 속성을 응용한 예시
- 이전 소스와 동일하지만, name 부분을 출력하고자 하는데로 수정하여서 구성하였습니다.
@DisplayName("덧셈 테스트")
@RepeatedTest(value = 5, name = "{displayName} :: 반복 {currentRepetition} / {totalRepetitions}")
public void repeatedAddTest2(TestInfo testInfo) {
// Arrange: 준비
Calculator myCalculator = new Calculator();
// Act: 행동
myCalculator.add(10.0);
// Assert: 단언 검증
Assertions.assertEquals(10.0, myCalculator.getResult());
// 현재 반복 횟수와 전체 반복 횟수를 출력
System.out.println(testInfo.getDisplayName());
}
2.2. @RepeatedTest 어노테이션의 name 속성을 응용한 결과
💡 @RepeatedTest 어노테이션의 name 속성을 응용한 결과
- 아래와 같이 name 속성 값으로 지정한 형태로 출력이 됨을 확인하였습니다.
3. [참고] TestInfo 클래스
💡 TestInfo 클래스 - JUnit 5에서 제공되는 인터페이스로, 테스트 메서드에 대한 유용한 정보를 제공합니다. 이를 통해 테스트 메서드의 이름, 디스플레이 이름, 태그 및 현재 반복 횟수 등의 정보를 얻을 수 있습니다. - TestInfo는 주로 테스트 메서드에 대한 메타데이터를 확인하거나, 테스트 실행 중에 동적으로 정보를 출력하는 데 사용됩니다.