在mockK中relaxed = true有什么作用?

c-a*_*-an 14 junit android kotlin mockk

我阅读了文档,但我仍然不明白。

这之间的差异

private val myClass: MyClass = mockk(relaxed = true)
Run Code Online (Sandbox Code Playgroud)

和这个。

private val myClass: MyClass = mockk()
Run Code Online (Sandbox Code Playgroud)

我的理解是如果放松是真的。然后,所有成员字段或方法都将返回默认值。否则,不会。这是正确的理解吗?

如果是这样,设置alwaysrelaxed=true会更好。但在这段视频中,瑞安同时使用了两者。为什么?

https://youtu.be/60KFJTb_HwU?t=1015

Mie*_*źma 9

如果您尝试调用一个不知道要返回什么的模拟方法,并且relaxed 未设置为 true,您将抛出异常。这样做是为了让测试不太可能引入不可预测的行为,因为开发人员没有故意模拟的方法返回默认值。

在链接的视频中,视图方法可能从未被调用,因此不需要“放松”。您还可以使用“relaxedUnitFun”,它仅适用于返回 Unit 的方法,例如对于负责事件日志记录的类来说很方便。

但这是一把双刃武器,因为“放松”一切会剥夺您上述的安全机制。如果这是你想要的,你也可以全局配置,检查https://mockk.io/#settings-file


Mar*_*ini 0

引用他们的文档:

宽松的模拟是为所有函数返回一些简单值的模拟。这允许您跳过为每种情况指定行为,同时仍然存根您需要的东西。对于引用类型,返回链式模拟。

来源