首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试Kotest测试

测试Kotest测试
EN

Stack Overflow用户
提问于 2022-10-10 07:03:20
回答 1查看 84关注 0票数 1

我不确定这是否可能,或者是否有一个更好的架构。我编写了一个函数来进行一些测试:

代码语言:javascript
运行
复制
fun validate(a: Any?, b: Any?){
   a shouldBe b
}

我的函数显然比这更复杂,但是现在我想测试一下测试本身。例如,我希望传递a=1b=null,并确保它失败。是否有一种使用Kotest测试失败或成功的方法

如果不是,怎样才是合适的架构方法呢?

我正试图依赖这个测试经常和在我服务的许多地方,所以我希望它是尽可能可靠的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-10 07:45:35

简单回答:使用shouldFail { ... }

这是可能的,因为Kotest (和许多其他框架)中的失败测试会抛出一个AssertionError。您可以检查该异常,以查看测试是否失败。因此,要检查失败的断言,可以编写:

代码语言:javascript
运行
复制
shouldThrow<AssertionError> { /* your failing test here */ }

正如您可能预期的那样,shouldThrow将捕获异常,这样它就不会传播。因此,实际上它将把失败的测试转化为通过测试,反之亦然。

为了使它更加方便和可读性,您可以编写几个扩展函数,如下所示:

代码语言:javascript
运行
复制
fun shouldFail(block: () -> Unit) = shouldThrow<AssertionError>(block)
fun shouldNotFail(block: () -> Unit) = shouldNotThrow<AssertionError>(block)

实际上,Kotest在标准断言中包含了shouldFail函数,因此您甚至不需要自己定义它。它们的执行情况与我在此提出的建议相同。不过,它们不包括shouldNotFail,大概是因为它的用处有点可疑。在"shouldNotFail“中包装测试会使断言失败时失败,如果断言通过则通过测试,这是.如果你不把它包在任何东西里,它会做什么。

要测试自己的断言函数,可以这样使用:

代码语言:javascript
运行
复制
shouldFail { 1 shouldBe 2 }

如果您查看Kotest的源代码本身,就会发现许多使用这种方法的内置断言函数的单元测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74011229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档