Back-End (web)
[JUnit5] @ParameterizedTest
햄과함께
2019. 12. 15. 20:47
320x100
@ParameterizedTest 어노테이션은 테스트 함수에 파라미터로 TC나 결과 등을 주입할 수 있다.
// build.gradle.kts
dependencies {
// add
testImplementation("org.junit.jupiter:junit-jupiter-params:5.5.2")
}
의존성추가
private fun String?.toIntOrNull(): Int? {
return if (this.isNullOrEmpty()) null
else try {
this.toInt()
} catch (e: NumberFormatException) {
null
}
}
테스트를 위와 같은 확장 함수를 하나 만들었다.
문자열이 null이거나 빈 경우 null을 반환하고 아닌 경우 문자열을 Int로 바꾸는 함수이다.
문자열이 Int형 포맷과 맞지 않은 경우도 exception을 잡아서 null을 반환하게 했다.
companion object {
// #2
@JvmStatic
private fun stringToLocalDateTimeTestCase() = Stream.of(
Arguments.of(-1, "-1"),
Arguments.of(0, "0"),
Arguments.of(1, "1")
)
}
// #1
@ParameterizedTest
@MethodSource("stringToLocalDateTimeTestCase")
fun convertToLocalDateTime_successTest(expected: Int, str: String) {
assertEquals(expected, str.toIntOrNull())
}
// #3
@ParameterizedTest
@ValueSource(strings = ["ab", "csd", "12!"])
@NullAndEmptySource
fun convertToLocalDateTime_nullTest(str: String?) {
assertNull(str.toIntOrNull())
}
#1 @MethodSource 어노테이션은 파라미터를 반환하는 함수이름을 명시해주어야 한다.
#2 @MethodSource 어노테이션에 주입할 파라미터를 반환하는 함수는 Stream<Arguments> 타입을 반환해준다. 그리고 static 함수여야 하므로 코틀린에서는 companion object안에 함수 정의를 해주고 @JvmStatic 어노테이션을 명시해줘야 한다.
#3 @NullAndEmptySource 어노테이션은 @NullSource, @EmptySource 2개를 합친 어노테이션이다.
파라미터에 null과 empty source를 주입해준다. 문자열에서는 null, ""가 주입된다.
320x100