繁体   English   中英

Mockito.when与实对象调用时返回null,必须使用any()

[英]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,因此它总是返回该值。

毕竟我只是找到原因了。 该问题的描述具有误导性,因此我必须注意它。

有两种情况。

  1. 在一种方法中,我使用模拟的Rest调用保存实体,将实体作为序列化json作为参数传递。 我猜想这样做时上下文每次都会创建一个新对象,并且内存地址是不同的。

  2. 在另一个方法中,我保存一个声明为私有字段的实体,实例化代码方法使用@Before注释。 因此,在每次测试之前都会创建一次,因此内存地址又是不同的。

暂无
暂无

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

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