为什么 Mockito 的 mock 在应该返回 null 时返回 0?

2022-09-04 03:00:17

当存在具有盒装类型属性的某个对象时,该属性的 getter 将返回 。但这应该返回 ,因为 boxed type 属性的默认值是 。这是什么问题?0nullnull

class Person {
    private Long id;

    public Long getId() {
        return id;
    }
}
...

@Mock Person person;

...
person.getId(); // 0 instead of null

答案 1

这只是在默认 Mockito 答案中为基元和包装器类型选择的默认值。


答案 2

我遇到了同样的问题,我的解决方案是将模拟的默认答案更改为:null

Person person;

...
person = mock(Person.class, new Answer<Object>() {
  @Override
  public Object answer(InvocationOnMock invocation) throws Throwable {
    return null;
  }
});
person.getId(); // null!

(不确定如果要使用注释,是否可以设置默认答案)@Mock

如果由于某种原因,您只想为(而不是例如)设置默认值,这应该可以在方法中完成以下操作:LongIntegeranswer

if(invocation.getMethod().getReturnType().equals(Long.class)){
  return null;
}else{
  return Mockito.RETURNS_DEFAULTS.answer(invocation);
}

推荐