Kotlin/포스팅

코테스트 예외 처리

짜집퍼박사(짜박) 2024. 1. 10. 21:14

Kotest에서 예외 처리는 테스트 코드에서 예외를 기대하고, 예외가 발생했을 때 테스트를 성공 또는 실패로 처리하는 과정을 의미합니다. Kotest는 테스트 케이스에서 예외를 처리하는 다양한 방법을 제공합니다.

 

1. 예외 발생 여부 확인

Kotest에서는 shouldThrow 함수를 사용하여 어떤 블록이 예외를 발생시켜야 하는지를 확인할 수 있습니다.

import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe
import io.kotest.matchers.shouldThrow

class ExceptionHandlingTest : StringSpec({

    "should throw ArithmeticException" {
        val block: () -> Unit = { throw ArithmeticException() }
        shouldThrow<ArithmeticException> {
            block()
        }
    }

    "should throw custom exception with message" {
        val block: () -> Unit = { throw CustomException("Custom message") }
        val exception = shouldThrow<CustomException> {
            block()
        }
        exception.message shouldBe "Custom message"
    }
})

위의 예제에서 shouldThrow 함수를 사용하여 특정 블록이 예외를 발생시키는지를 확인하고, 예외의 타입과 메시지를 검증하고 있습니다.

 

2. 예외 발생 여부와 함께 결과 값 확인

shouldThrow 함수를 사용할 때, 예외가 발생하지 않을 경우 블록의 반환 값을 확인할 수도 있습니다.

import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe
import io.kotest.matchers.shouldThrow

class ExceptionHandlingTest : StringSpec({

    "should throw ArithmeticException and result should be 42" {
        val block: () -> Int = { throw ArithmeticException("Exception"); 42 }
        val result = shouldThrow<ArithmeticException> {
            block()
        }
        result.message shouldBe "Exception"
    }
})

위의 예제에서는 shouldThrow 함수로 예외를 확인하면서, 예외가 발생하지 않을 경우 블록의 반환 값을 검증하고 있습니다.

 

3. 예외 발생 여부 예상하기

특정 테스트에서 예외가 발생해야 하는지를 선언적으로 표현할 수도 있습니다.

import io.kotest.core.spec.style.StringSpec
import io.kotest.matchers.shouldBe

class ExceptionHandlingTest : StringSpec({

    "should throw ArithmeticException" {
        val block: () -> Unit = { throw ArithmeticException() }
        shouldThrow<ArithmeticException> {
            block()
        }
    }

    "should throw CustomException with message" {
        val block: () -> Unit = { throw CustomException("Custom message") }
        shouldThrow<CustomException> {
            block()
        }
    }
})

위의 예제에서는 각 테스트 케이스의 이름에 따라 예외가 발생해야 하는지를 선언적으로 표현하고 있습니다.

Kotest의 예외 처리 기능을 활용하면 특정 블록이 예외를 발생시키는지 여부를 검증하고, 발생한 예외의 타입 및 메시지를 확인할 수 있습니다. 이를 통해 테스트 코드에서 예외 상황에 대한 처리를 명시적으로 표현할 수 있습니다.

 

With ChatGPT

'Kotlin > 포스팅' 카테고리의 다른 글

코테스트 속성 기반 테스트  (0) 2024.01.10
코테스트 비결정적 코드  (0) 2024.01.10
코테스트 인스펙터  (0) 2024.01.10
코틀린 인스펙터  (0) 2024.01.10
코틀린 매처  (0) 2024.01.10