gpt4 book ai didi

java - Mockito Spy 不调用真实对象

转载 作者:行者123 更新时间:2023-11-29 04:54:38 24 4
gpt4 key购买 nike

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()测试的。以下是 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 已通过。据我所知, spy 应该调用真实对象的方法。在这种情况下,getSum() 应该返回 3 并且控制台显示

Verify Class constructor called
get sum called
after when :4

相反,它返回在 thenReturn(4) 中分配的 4。有什么需要说明的吗?

最佳答案

监视对象意味着真正的方法被调用,除非它被 stub 。引用 Mockito Javadoc (强调我的):

You can create spies of real objects. When you use the spy then the real methods are called (unless a method was stubbed).

因为在这种情况下你正在 stub getSum(通过 Mockito.when(spy.getSum(1,2))),真正的方法没有被调用; stub 是。

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

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

关于java - Mockito Spy 不调用真实对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com