【发布时间】:2015-11-04 07:46:46
【问题描述】:
Mockito 中这两个声明有什么区别?
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
【问题讨论】:
标签: mockito
Mockito 中这两个声明有什么区别?
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
【问题讨论】:
标签: mockito
以前的 CALLS_REAL_METHODS 样式创建一个未初始化的对象;没有构造函数运行,也没有设置任何字段。通常这种语法是不安全的,因为实际的实现会与可能构成无效或不可能状态的未初始化字段交互。
后一种@Spy 风格允许您调用您选择的构造函数,或者Mockito 将try to call a no-arg constructor if the field is uninitialized。然后将这些字段复制到生成的 Spy(扩展了 spy-on 类型)中,从而实现更安全、更真实的交互。
必要提醒:不要在玩具示例之外实际模拟 Java 集合,并且不要忘记在覆盖间谍和 CALLS_REAL_METHOD 模拟时使用 doReturn 语法,否则您将在 when 调用中调用真实方法.
【讨论】: