提问人:c-an 提问时间:8/4/2022 更新时间:8/4/2022 访问量:11024
relaxed = true 在 mockK 中有什么作用?
What does relaxed = true do in mockK?
问:
我读了文档,但我仍然不明白。
这两者的区别
private val myClass: MyClass = mockk(relaxed = true)
和这个。
private val myClass: MyClass = mockk()
我所理解的是,如果放松是真的。然后,所有成员字段或方法都将返回默认值。否则,不是。 这是正确的理解吗?
如果是这样,设置总是放松 = true 更好。但在这段视频中,瑞安同时使用了这两种方法。为什么?
答:
0赞
Martin Marconcini
8/4/2022
#1
引用他们的文档:
宽松的模拟是为所有函数返回一些简单值的模拟。这允许您跳过为每种情况指定行为,同时仍然存根您需要的内容。对于引用类型,将返回链接式模拟。
评论
0赞
c-an
8/4/2022
我读了那部分。但是你能给我更多的例子吗?我不明白什么时候应该使用它。
0赞
Martin Marconcini
8/4/2022
我认为另一个答案更好地描述了用例,但它本质上是一种在需要未模拟字段时让模拟不会引起异常的方法,如果您只需要使用模拟的一部分而忽略其余部分,则可能会发生这种情况。不过要小心,因为这些往往会堆积起来并成为商品,并且在 5 年内,一些开发人员会诅咒试图找到所有 relaxed = true 实例以出于某种原因删除它们......并表示开发人员不会高兴。
8赞
Mieszko Koźma
8/4/2022
#2
如果你尝试调用一个不知道要返回什么的模拟方法,并且 relaxed 未设置为 true,则会引发异常。这样做,因此测试不太可能引入不可预测的行为,因为开发人员不会故意模拟的方法返回默认值。
在链接的视频中,可能从未调用过查看方法,因此不需要“放松”。您还可以使用“relaxedUnitFun”,它仅适用于返回 Unit 的方法,例如用于负责事件日志记录的类。
不过,这是一把双刃剑,因为“放松”一切会剥夺您上述安全机制。如果这是您想要的,您也可以全局配置,请检查 https://mockk.io/#settings-file
评论
0赞
c-an
8/5/2022
啊,所以,当 relaxed 为 false 时,它会抛出一个 Exception,否则如果它为 true,它将返回默认值。我很好奇,当它是假的时,它会抛出一个异常。当它的方法从未被调用时,它是否被使用?(或其他情况?返回默认值(relaxed = true)并不是故意模拟的,而是为什么以及何时使用它?如果不是故意嘲笑,那似乎不对。而且我很好奇,在这种情况下 stackoverflow.com/questions/73203208/...,我可以使用relaxedUnitFun吗?我该如何使用它?我这里不需要coEverything吗?
评论