繁体   English   中英

Mockito Spy不会称之为真实物体

[英]Mockito Spy doesnot call the real object

public class VerifyClass {

    public VerifyClass() {
        System.out.println("Verify Class constructor called");
    }

    public int getSum(int a,int b){
        System.out.println("get sum called");
        return a+b;
    }

}

上面的类的getSum()方法是通过spy()测试的。 以下是间谍的使用方法。

@Test
public void testSpy(){
    VerifyClass ob=new VerifyClass();
    VerifyClass spy=Mockito.spy( ob );
    Mockito.when(spy.getSum(1,2)).thenReturn(4);
    System.out.println("after when :" + spy.getSum(1,2));
    assertEquals(4, spy.getSum(1,2));
}

这个assertEquals被传递。 据我所知,间谍应该调用真正的Object方法。 在这种情况下, getSum()应返回3并显示控制台

Verify Class constructor called
get sum called
after when :4

相反,它返回4,然后在thenReturn(4)分配。 有任何澄清吗?

监视对象意味着实际方法被调用,除非它被存根。 引用Mockito Javadoc (强调我的):

您可以创建真实对象的间谍。 当你使用spy时,会调用真正的方法( 除非方法被存根 )。

因为在这种情况下你正在使用getSum (通过做Mockito.when(spy.getSum(1,2)) ),真正的方法不会被调用; 存根是。

作为旁注,真正的getSum实际上是在你编写Mockito.when(spy.getSum(1,2))Mockito.when(spy.getSum(1,2)) ,这就是为什么你的日志显示get sum called 如果您不希望这种情况发生,您可以使用

doReturn(4).when(spy).getSum(1, 2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM