android - 使用间谍与无间谍的 Mockito 性能
问题描述
假设我有一个“演示者”:
class Presenter
我将为该课程编写多个测试。
创建演示者的方法有两种:
1.
class PresenterTests {
@Test
fun test_attach() {
val presenter = Presenter()
// presenter.doThings()
// verify / asserts
}
}
2.
class PresenterTests {
@Test
fun test_attach() {
val presenter = spy(Presenter())
// presenter.doThings()
// verify / asserts
}
}
如果我总是对所有对象使用 spy 并在真正需要时检查它们,是否存在任何性能问题?
解决方案
我不知道使用 时有任何显着的性能损失spy()
,但是如果您监视所有内容,可能会由于其他原因引入意外或不需要的行为。
Mockito不会将调用委托给传递的真实实例,而是实际创建它的副本。因此,如果您保留真实实例并与之交互,请不要期望间谍知道这些交互及其对真实实例状态的影响。推论是,当在 spy而不是在真实实例上调用未存根的方法时,您不会看到对真实实例的任何影响。
如果您在任何地方使用,这可能会导致您的测试出现意外行为(取决于它们的编写方式)spy()
。
注意最终方法。Mockito 不模拟最终方法,因此底线是:当您监视真实对象时+您尝试存根最终方法=麻烦。您也将无法验证这些方法。
这是 Mockito 中的一个限制,可能会导致问题。
此外,还有这个声明(来自同一个 Javadoc)与监视所有内容的想法背道而驰:
真正的间谍应该小心谨慎地偶尔使用,例如在处理遗留代码时。
推荐阅读
- android - React Native 无法识别的事件和 Metro 服务器不工作
- powershell - 用于导出 AD 数据的 PS 脚本
- python - 逻辑回归模型的值错误以及如何检查预测准确性?
- r - 从 sapply 子集中提取参数和 r 平方
- python - 为什么当我尝试在保留字 float 和 int 中赋值时没有显示错误?
- mysql - 使用游标自动创建表
- sql - sqlite - 具有唯一约束的 INSERT 最终插入多条记录
- android - Android:圆形图像的框架
- javascript - 在 Firefox 中获取失败/被阻止
- deep-learning - PyTorch:Dropout (?) 导致训练+验证 V. 仅训练的不同模型收敛