假设我有一个"Presenter":
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
}
}如果我对我所有的对象都使用always spy,并且只在真正需要的时候检查它们,会不会有性能问题?
发布于 2020-01-09 02:07:15
我不知道在使用spy()时有任何显著的性能损失,但是如果您监视所有东西,您可能会出于其他原因引入意外或不想要的行为。
Mockito不会将调用委托给传递的真实实例,而是实际创建该实例的副本。因此,如果你保留真实的实例并与之交互,不要期望间谍会意识到这些交互及其对真实实例状态的影响。推论是,当在spy上调用未存根的方法,而不是在真实实例上调用时,您将看不到对真实实例的任何影响。
这可能会导致测试中出现意想不到的行为,影响你在任何地方使用spy()的编写方式。
注意最后的方法。Mockito不模拟最终方法,所以底线是:当你窥探真实对象时+你试图存根最终方法=麻烦。此外,您也无法验证这些方法。
这是Mockito中的一个限制,可能会导致问题。
此外,还有这样一句话(来自同一个Javadoc),它与监视一切的想法背道而驰:
在处理遗留代码时,应该小心并偶尔使用
真正的间谍。
https://stackoverflow.com/questions/59649740
复制相似问题