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

时间:2018-09-13 15:25:57

标签: java testing mockito

当我使用模拟@Service进行单元测试时,我注意到在Mockito.when()语句中,当我保存真实对象时,我得到null作为返回值;并且我必须使用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。第二种形式返回保存的实体。

为什么?

编辑:

抱歉,实际上我没有实例化上面的对象。我用了另外两种方式。看看我的答案。

1 个答案:

答案 0 :(得分:1)

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

有两种情况。

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

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