[英]Mockito.when calling with real object return null, must use any()
当我使用模拟@Service
单元测试时,我注意到在Mockito.when()
语句中,当我保存真实对象时,将得到null
作为return; 而且我必须使用any()
。
因此,不要使用:
@Mock
private BinInfoService service;
...
@Test
public void testSave() {
SomeBean bean = new SomeBean();
Mockito.when(service.saveBinInfo(bean).thenReturn(bean);
}
我必须使用:
Mockito.when(service.saveBinInfo(Mockito.any(SomeBean.class))).thenReturn(bean);
第一种形式返回null
。 而第二种形式返回保存的实体。
为什么?
编辑:
抱歉,实际上我没有实例化上面的对象。 我用了另外两种方式。 看我的答案。
来自https://static.javadoc.io/org.mockito/mockito-core/2.22.0/org/mockito/Mockito.html#argument_matchers
“ Mockito以自然的Java样式验证参数值:通过使用equals()方法”
可能您的bean没有实现equals方法,所以它返回null,因为默认实现下一个新bean不等于另一个bean。 另一方面,匹配器允许该类的任何bean,因此它总是返回该值。
毕竟我只是找到原因了。 该问题的描述具有误导性,因此我必须注意它。
有两种情况。
在一种方法中,我使用模拟的Rest调用保存实体,将实体作为序列化json作为参数传递。 我猜想这样做时上下文每次都会创建一个新对象,并且内存地址是不同的。
在另一个方法中,我保存一个声明为私有字段的实体,实例化代码方法使用@Before
注释。 因此,在每次测试之前都会创建一次,因此内存地址又是不同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.