[Kotest] Parameterized test에서 모든 enum을 돌면서 테스트하기 (exhaustive)
by 스뎅(thDeng) onKotest의 Parameterized test(Property test)의 Generator에는 모든 enum과 같이 합타입( enum/sealed class 그리고 대수적 타입(algebraic data type) 참고)의 모든 값을 테스트할 수 있는 Exhaustive가 있다.
아래와 같이 checkAll
과 함께 사용하면, enum의 모든 값을 테스트한다. (MyStatus
는 enum이다.)
context("accept") {
checkAll(
Exhaustive.enum<MyStatus>()
) { myStatus ->
test("모든 status에 대해 유효성 검사를 한다. - $myStatus") {
// given
val machine = MachineFixture.aMachine(status = myStatus)
// expect
validtionRule.accept(machine) shouldBe true
}
}
}
이 enum 중 일부만 테스트를 하고 싶은 경우 filter
, filterNot
을 사용하면 된다.
context("accept") {
checkAll(
Exhaustive.enum<MyStatus>().filter { it == ONGOING }
) { adGroupStatus ->
test("status 가 ONGOING 일 때만 유효성 검사를 한다. - $myStatus") {
// given
val machine = MachineFixture.aMachine(status = myStatus)
// expect
validtionRule.accept(machine) shouldBe true
}
}
checkAll(
Exhaustive.enum<MyStatus>().filterNot { it == ONGOING }
) { adGroupStatus ->
test("adGroup status 가 ONGOING 이 아닐 때는 유효성 검사를 하지 않는다. - $adGroupStatus") {
// given
val machine = MachineFixture.aMachine(status = myStatus)
// expect
validtionRule.accept(machine) shouldBe false
}
}
}