在将模拟验证与断言库一起使用时,检查所有断言和验证

时间:2019-12-10 14:07:00

标签: kotlin mockk kotlintest

我希望测试报告所有断言和验证。因此,mockk验证和断言库(在这种情况下,KotlinTest)断言都应该运行,而不是短路。

换句话说,我不想停止测试...

verify(exactly = 1) { mock.methodcall(any()) } // ... here
success shouldBe true // how can I check this line too

也不...

success shouldBe true // ... here
verify(exactly = 1) { mock.methodcall(any()) }  // how can I check this line too

如何执行此操作?我愿意只使用一种工具。

1 个答案:

答案 0 :(得分:3)

根据您的评论,您说您正在使用KotlinTest

在KotlinTest中,我相信您可以针对所需的行为使用assertSoftly

  

通常,断言之类的应该在失败时引发异常。但是有时候您想在一个测试中执行多个断言,并且想查看所有失败的断言。 KotlinTest为此提供了assertSoftly函数。

assertSoftly {
  foo shouldBe bar
  foo should contain(baz)
}
     

如果块内的任何声明失败,则测试将继续运行。所有失败都将在该块末尾报告为单个异常。

然后,我们可以将您的测试转换为使用assertSoftly

assertSoftly {
    success shouldBe true
    shouldNotThrowAny {
        verify(exactly = 1) { mock.methodcall(any()) }
    }
}

有必要将verify包裹在shouldNotThrowAny中,以使assertSoftly在引发异常时意识到这一点