특정 테스트를 작성할 때 input의 형태는 정해져 있는데 많은 값들을 검증해야 하는 경우에 각각을 테스트케이스로 만들기는 너무 귀찮고 번거롭다.. 이러한 상황에서 활용할 수 있는 JUnit 어노테이션을 알아보자.
Dependency
스프링 부트를 이용해서 개발하고 있다고 하면 테스트를 작성하기 위해 추가해야 할 dependency는 간단하다
// gradle
dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
// maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
사용법
예시로 다양한 osType별 system type 체크가 필요할 때
우선 하나의 타입에 해당하는 테스트 케이스를 만들었다
이제 나머지 타입에 해당하는 모든 테스트 케이스를 만들어야 하는데 아찔하다
형태는 동일한데 들어오는 값들만 달라지는 것이니 공통화해서 한방에 처리할 수 있다
@Test
void checkOsTypeTest() {
Token token = Token.builder()
.sType("SYSTEM_ANDRO")
.build();
Assertions.assertThatThrownBy(() -> token.checkOsType("ANDROID"))
.isInstanceOf(CheckException.class);
}
아래와 같이 @ParameterizedTest를 붙여주고
원하는 데이터 Source를 정의해 주면 된다
@ParameterizedTest(name = "System Type : {0} test")
@CsvSource({"SYSTEM_ANDRO,ANDROID", "SYSTEM_IOS,IOS", "SYSTEM_Lin,Linux", "SYSTEM_MAC,MAC"})
void checkOsTypeTest(String sysType, String opType) {
Token token = Token.builder()
.sType(sysType)
.build();
Assertions.assertThatThrownBy(() -> token.checkOsType(opType))
.isInstanceOf(CheckException.class);
}
다양한 데이터 소스가 존재하는데 실무에서 많이 사용될 것이라고 생각되는 것들은 CSV와 Method이다
@ParameterizedTest(name = "System Type : {0} test")
@MethodSource("testMeth")
void checkOsTypeTest(String sysType, String opType) {
Token token = Token.builder()
.sType(sysType)
.build();
Assertions.assertThatThrownBy(() -> token.checkOsType(opType))
.isInstanceOf(CheckException.class);
}
private static Stream<Arguments> testMeth() {
return Stream.of(
Arguments.of("SYSTEM_ANDRO","ANDROID")
Arguments.of("SYSTEM_IOS","IOS")
);