代码之家  ›  专栏  ›  技术社区  ›  WesternGun

Mockito.when 使用real object调用返回null,必须使用any()

  •  0
  • WesternGun  · 技术社区  · 6 年前

    @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);
    

    第一个表单返回 无效的

    为什么?

    编辑:

    2 回复  |  直到 6 年前
        1
  •  1
  •   JPinzon01    6 年前

    https://static.javadoc.io/org.mockito/mockito-core/2.22.0/org/mockito/Mockito.html#argument_matchers

    “Mockito以自然java样式验证参数值:使用equals()方法”

    另一方面,matcher允许该类的任何bean,因此它总是返回值。

        2
  •  1
  •   WesternGun    6 年前

    有两种情况。

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

    2. @Before . 因此,在每次测试之前,它将被创建一次,因此内存地址也是不同的。