kotlin 如何在Kotest中编写一个测试来Assert抛出的异常?

siotufzp  于 2023-02-24  发布在  Kotlin
关注(0)|答案(1)|浏览(141)

我想通过测试来介绍一个抛出异常的情况。我试过传递一个不正确的输入,但仍然没有运气。
在Kotest中,当函数被调用时,我们可以显式地抛出异常吗?
我在Kotest Doc中找不到任何文档来涵盖此场景:

主文件.kt
parseEvent(input).forEach { event ->
    try {
        eventsProcessor(event)
    } catch (ex: Exception) {
        log.error { ex }
        batchItemFailures.add(SQSBatchResponse.BatchItemFailure(event.msgId))
    }
}

private fun eventsProcessor(event: Event<*>) {
    try {
        when (event.type) {
            "xyz" -> dailyprocess()
            else -> log.warn { "Unknown event type: ${event.type}" }
        }
    } catch (ex: Exception) {
        log.error { ex }
        throw ex
    }
}
测试.kt
describe("Event parsing") {

    context("when event is just a map") {
        val event = mapOf(
            "Records" to listOf(
                mapOf("body" to "jsonBody1")))

        it("parses and process event") {

            handler.handleRequest(event, createTestContext())
            val exception = shouldThrow<Exception> {
                dailyprocess(Instant.now())
            }

        }
    }
}
xbp102n0

xbp102n01#

当然可以,这里有一个最小的例子:
假设您有一个在失败时抛出错误(IllegalStateException)的实现:

fun aFailingImplementation(): Unit = 
  error("This is a failing implementation")

然后,您可以使用以下命令对此进行测试:

@Test
fun `Assert exception is thrown`() {
    shouldThrow<IllegalStateException> {
        aFailingImplementation()
    }.apply {
        message shouldBe "This is a failing implementation"
        // stackTrace assertions can go here...
    }
}

您可以在此处阅读有关测试异常的信息:https://kotest.io/docs/assertions/exceptions.html

相关问题