首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用spy与不使用spy的Mockito性能

使用spy与不使用spy的Mockito性能
EN

Stack Overflow用户
提问于 2020-01-09 00:08:33
回答 1查看 104关注 0票数 0

假设我有一个"Presenter":

代码语言:javascript
复制
class Presenter

我将为该类编写多个测试。

有两种方法可以创建演示者:

1.

代码语言:javascript
复制
class PresenterTests {

    @Test
    fun test_attach() { 
       val presenter = Presenter()

       // presenter.doThings()
       // verify / asserts
    }
}

2.

代码语言:javascript
复制
class PresenterTests {

    @Test
    fun test_attach() { 
       val presenter = spy(Presenter())

       // presenter.doThings()
       // verify / asserts
    }
}

如果我对我所有的对象都使用always spy,并且只在真正需要的时候检查它们,会不会有性能问题?

EN

回答 1

Stack Overflow用户

发布于 2020-01-09 02:07:15

我不知道在使用spy()时有任何显著的性能损失,但是如果您监视所有东西,您可能会出于其他原因引入意外或不想要的行为。

来自Javadoc for spy()

Mockito不会将调用委托给传递的真实实例,而是实际创建该实例的副本。因此,如果你保留真实的实例并与之交互,不要期望间谍会意识到这些交互及其对真实实例状态的影响。推论是,当在spy上调用未存根的方法,而不是在真实实例上调用时,您将看不到对真实实例的任何影响。

这可能会导致测试中出现意想不到的行为,影响你在任何地方使用spy()的编写方式。

注意最后的方法。Mockito不模拟最终方法,所以底线是:当你窥探真实对象时+你试图存根最终方法=麻烦。此外,您也无法验证这些方法。

这是Mockito中的一个限制,可能会导致问题。

此外,还有这样一句话(来自同一个Javadoc),它与监视一切的想法背道而驰:

在处理遗留代码时,应该小心并偶尔使用

真正的间谍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59649740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档