如何解决嘲笑每个{} .throws异常测试失败
当前一个方法调用引发异常时,我需要验证未进行特定的调用。
CREATE VIEW view_name AS
SELECT *
FROM table_name
PIVOT (
MAX( descr )
FOR lan IN (
'C' AS Spanish,'V' AS English
)
)
此代码有问题,它因引发异常而不是由于验证失败而失败。
解决方法
我知道您的 WHEN 块将始终引发异常。 在这种情况下,从我的角度来看,您有多种选择:
- 简单的 Kotlin。用 try-catch 块包裹 WHEN 块,例如像这样:
// GIVEN
every { relaxedMock.eats() }.throws(NotHungryException())
// WHEN
var exceptionThrown: Boolean = false
try {
sut.live()
} catch(exception: NotHungryException) {
// Maybe put some assertions on the exception here.
exceptionThrown = true
}
assertTrue(exceptionThrown)
// THEN
verify (exactly = 0) { relaxedMock2.sleeps() }
- 要获得更好的代码,您可以使用 JUnit5 API's Assertions。
assertThrows
将期望特定代码段引发异常。如果没有抛出异常,它将无法通过测试。它还会返回抛出的异常,供您检查。
import org.junit.jupiter.api.Assertions
// GIVEN
every { relaxedMock.eats() }.throws(NotHungryException())
// WHEN
val exception = Assertions.assertThrows(NotHungryException::class.java) { sut.live() }
// THEN
verify (exactly = 0) { relaxedMock2.sleeps() }
- 如果您使用 Kotest,则可以使用
shouldThrow
断言。这还允许您检索抛出的异常并验证其类型。
import io.kotest.assertions.throwables.shouldThrow
// GIVEN
every { relaxedMock.eats() }.throws(NotHungryException())
// WHEN
val exception = shouldThrow<NotHungryException> { sut.live() }
// THEN
verify (exactly = 0) { relaxedMock2.sleeps() }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。