Kotlin 单元测试变量声明 lateinit vs lazy vs nullable vs non-nullable

Kotlin Unit Test variable declaration lateinit vs lazy vs nullable vs non-nullable

我们正在将大部分单元测试从 Java 转换为 Kotlin。在我们的单元测试中声明变量的最佳方式是什么(虽然不是所有一些可能仍然有使用 lateinit、lazy、nullable 等的用例...)以及为什么。

我相信 lateinit、lazy、nullable 和 non-nullable 是 Kotlin 中很好的特性,在单元测试中也是如此。

你可能知道 lateinit 仅与 var lateinit var 一起工作,这提供了以下功能:

  1. 您可以从项目的任何部分初始化 lateinit var,所以 这使您能够在可能的范围内初始化变量 你的测试用例
  2. lateinit var 不适用于不可为 null 的值,因此您可以将 null 值分配给 lateinit 变量并检查其可空性作为测试用例。
  3. lateinit var 中,您可以经常更改该值,并且由于您正在更改值,它会增加您的测试用例,从而增加您的覆盖率。

在惰性模式下,它仅适用于 val,val ins by lazy{}

  • 当你有一个单例(对象class)并且你的测试用例依赖于这个实例时,这是一个很好的做法,所以你创建它一次by lazy

我建议阅读 this article 关于 kotlin 的最佳实践。

我希望这是好的。

下面是用法:

安全调用(?.): 这有助于避免 NullPointerException。如果对象不为空,它会在对象的帮助下调用 method/property,否则 returns 为空(非 NPE)。这只是一个空检查。

!!操作员: 这用于明确断言 属性 不为空。但是如果它是 null 那么它会抛出 NullPointerException

后期初始化: 使用lateinit,初始值不需要赋值。我们可以稍后对其进行初始化。我们不需要初始化任何东西,直到我们需要它。

这只是对更多细节的简短解释,我发现下面的博客很有用,请查看: https://medium.com/@agrawalsuneet/safe-calls-vs-null-checks-in-kotlin-f7c56623ab30 https://www.bignerdranch.com/blog/kotlin-when-to-use-lazy-or-lateinit/