我不确定这是否可能,或者是否有一个更好的架构。我编写了一个函数来进行一些测试:
fun validate(a: Any?, b: Any?){
a shouldBe b
}
我的函数显然比这更复杂,但是现在我想测试一下测试本身。例如,我希望传递a=1
和b=null
,并确保它失败。是否有一种使用Kotest
测试失败或成功的方法
如果不是,怎样才是合适的架构方法呢?
我正试图依赖这个测试经常和在我服务的许多地方,所以我希望它是尽可能可靠的。
发布于 2022-10-10 07:45:35
简单回答:使用shouldFail { ... }
。
这是可能的,因为Kotest (和许多其他框架)中的失败测试会抛出一个AssertionError
。您可以检查该异常,以查看测试是否失败。因此,要检查失败的断言,可以编写:
shouldThrow<AssertionError> { /* your failing test here */ }
正如您可能预期的那样,shouldThrow
将捕获异常,这样它就不会传播。因此,实际上它将把失败的测试转化为通过测试,反之亦然。
为了使它更加方便和可读性,您可以编写几个扩展函数,如下所示:
fun shouldFail(block: () -> Unit) = shouldThrow<AssertionError>(block)
fun shouldNotFail(block: () -> Unit) = shouldNotThrow<AssertionError>(block)
实际上,Kotest在标准断言中包含了shouldFail
函数,因此您甚至不需要自己定义它。它们的执行情况与我在此提出的建议相同。不过,它们不包括shouldNotFail
,大概是因为它的用处有点可疑。在"shouldNotFail“中包装测试会使断言失败时失败,如果断言通过则通过测试,这是.如果你不把它包在任何东西里,它会做什么。
要测试自己的断言函数,可以这样使用:
shouldFail { 1 shouldBe 2 }
如果您查看Kotest的源代码本身,就会发现许多使用这种方法的内置断言函数的单元测试。
https://stackoverflow.com/questions/74011229
复制相似问题