当某个对象具有盒装类型属性时,属性的getter返回0
。但是这应该返回null
,因为盒装类型属性的默认值是null
。这有什么问题?
class Person {
private Long id;
public Long getId() {
return id;
}
}
...
@Mock Person person;
...
person.getId(); // 0 instead of null
答案 0 :(得分:7)
这只是默认Mockito答案中原始和包装类型的默认值。
答案 1 :(得分:3)
我遇到了同样的问题,我的解决方案是将模拟的默认答案更改为null
:
Person person;
...
person = mock(Person.class, new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
return null;
}
});
person.getId(); // null!
(如果您想使用@Mock
注释,不确定是否可以设置默认答案)
如果由于某种原因你只想设置Long
的默认值(而不是Integer
),那么应该在answer
方法中执行此操作:
if(invocation.getMethod().getReturnType().equals(Long.class)){
return null;
}else{
return Mockito.RETURNS_DEFAULTS.answer(invocation);
}
答案 2 :(得分:0)
这是getter方法返回的正确值。
当你在Mokito模拟一个类时,课堂上的所有方法也会被嘲笑。因此,如果将盒装类型属性设置为Null,则无关紧要。当您看到它的LONG值作为实例变量时,其默认值为0L。
因此person.getId()将始终返回0而不是NULL。