Mockito中这两个声明有什么区别?
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
Mockito中这两个声明有什么区别?
@Mock(answer = Answers.CALLS_REAL_METHODS)
ArrayList<String> mock;
@Spy
ArrayList<String> spy;
以前的CALLS_REAL_METHODS风格创建一个未初始化的对象;没有构造函数被运行,也没有设置任何字段。一般来说,这种语法是不安全的,因为真实的实现将与可能构成无效或不可能状态的未初始化字段交互。
后来的@Spy风格允许您调用所选构造函数,或者Mockito将尝试调用无参构造函数(如果该字段未初始化)。然后,这些字段将被复制到生成的Spy中(扩展了被窥视类型),从而允许更安全和更真实的交互。
友情提示:除了玩具示例外,不要真正嘲笑Java集合,并且在覆盖间谍和CALLS_REAL_METHOD模拟时不要忘记使用doReturn
语法,否则你将在when
调用中调用实际方法。