使用mock模拟常量值

Rob*_*ann 6 kotlin mockk

我们目前有一个仅由常量值组成的对象。

object Constants {
    const val VERSION = V1
}
Run Code Online (Sandbox Code Playgroud)

然而,这些常量的值将来可能会改变。因此,我想确保如果该值不满足某些条件,测试就会中断VERSION。我们使用 Mockk 进行模拟,所以我尝试Constants根据这样的文档来模拟对象

mockkObject(Constants)
every { Constants.VERSION } returns -1
assertThat(Constants.VERSION).isEqualTo(-1)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不会编译并出现以下错误:io.mockk.MockKException: Missing calls inside every { ... } block.

有没有办法模拟常量值?或者我应该为常量提供 getter 方法并模拟它们?

Neo*_*Neo 6

kotlin 中的常量没有吸气剂,这就是您的异常背后的原因:io.mockk.MockKException: Missing calls inside every { ... } block。没有可以模拟来检索值的函数。

我建议您重新考虑测试常量的目标(这不是典型的测试用例),或者制定解决方法。解决方法可能是:

  • 为每个要模拟的常量创建一个 getter
  • 放入Constants另一个类中,该类将返回Constants对象,您可以测试每个字段(使用assertJ fieldByField
  • 将 const 值放入可以测试的文本或属性文件中