让我们说我有一个“主持人”:
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
}
}
如果我对所有对象始终使用间谍并且仅在确实需要时检查它们,是否存在性能问题?
答案 0 :(得分:1)
在使用spy()
时,我不知道会有任何明显的性能下降,但是如果您监视所有内容,则可能由于其他原因而引入意外或不必要的行为。
Mockito 不将调用委托给传递的真实实例,而是实际上创建它的副本。因此,如果保留真实实例并与其进行交互,请不要期望间谍知道这些交互及其对真实实例状态的影响。结果是,当在间谍中将 unstubbed 方法调用 而不在真实实例中调用 时,您不会看到对真实实例。
如果您在各处使用spy()
,则可能会导致测试中出现意外行为-取决于测试的编写方式。
当心最终方法。 Mockito不会模拟最终方法,因此最重要的是:监视真实对象时+尝试对最终方法进行存根=麻烦。另外,您也将无法验证这些方法。
这是Mockito中的一个限制,可能会导致问题。
此外,有一条来自同一Javadoc的语句,这与监视一切的想法背道而驰:
真正的间谍应该谨慎使用,例如在处理遗留代码时。