在以下示例中(mockito 1.10.19):
MyClass myClass = Mockito.mock(MyClass .class, RETURNS_DEFAULTS);
String s = myClass.getName();
Run Code Online (Sandbox Code Playgroud)
为什么这会导致s == null
而不是空字符串?
它确实承诺null
在ReturnsEmptyValues中使用String .但回归似乎很明显""
,我想知道是否有理由不这样做.
编辑:从1.8更新版本到1.10.19,因为没有文档可用于1.8.
Tom*_*sky 11
从您发布的链接;
每个Mockito模拟的默认答案.
- 返回原始返回方法的适当原语
- 返回原始包装类的一致值(例如int-returns方法返回0和Integer-returning方法也返回0)
- 返回集合返回方法的空集合(适用于最常用的集合类型)
- 返回toString()方法的mock的描述
- 其他所有内容返回null
来自FAQ:
mocks默认返回什么值?
为了透明和不引人注目,所有Mockito模拟默认返回'nice'值.例如:零,假,空集合或空值.
可能是为了与任何其他非集合非原始Wrapper对象返回null的其他方法保持一致.
您总是可以实现自己的Answer传递给mock
String返回方法返回空字符串.
它没有在设计时考虑,现在出于稳定性原因,这种行为没有改变.
有一个名为ReturnsMoreEmptyValues的非公开答案,返回时类型名称表示更多空值.
您还可以查看内部使用ReturnsMoreEmptyValues 的Mockito.RETURNS_SMART_NULLS答案,并提供更有趣的调试信息.
请注意此链接指向1.10.19版本的javadoc,但在撰写本文时,此行为在版本2.x中保持不变.