当我使用模拟@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
。第二种形式返回保存的实体。
为什么?
编辑:
抱歉,实际上我没有实例化上面的对象。我用了另外两种方式。看看我的答案。
答案 0 :(得分:1)
毕竟我只是找到原因了。问题的描述具有误导性,所以我必须注意它。
有两种情况。
在一种方法中,我使用模拟的Rest调用保存实体,将实体作为序列化json作为参数传递。我猜想这样做时上下文每次都会创建一个新对象,并且内存地址是不同的。
在另一种方法中,我保存了一个声明为私有字段的实体,实例化代码方法用@Before
注释。因此,在每次测试之前,它都会创建一次,因此内存地址又是不同的。