为什么Mockito RETURNS_DEFAULT没有返回默认字符串?

Thi*_*ler 4 java mockito

在以下示例中(mockito 1.10.19):

    MyClass myClass = Mockito.mock(MyClass .class, RETURNS_DEFAULTS);
    String s = myClass.getName();
Run Code Online (Sandbox Code Playgroud)

为什么这会导致s == null而不是空字符串?

它确实承诺nullReturnsEmptyValues中使用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传递给mockString返回方法返回空字符串.


Bri*_*ice 9

它没有在设计时考虑,现在出于稳定性原因,这种行为没有改变.

有一个名为ReturnsMoreEmptyValues的非公开答案,返回时类型名称表示更多空值.

您还可以查看内部使用ReturnsMoreEmptyValues 的Mockito.RETURNS_SMART_NULLS答案,并提供更有趣的调试信息.

请注意此链接指向1.10.19版本的javadoc,但在撰写本文时,此行为在版本2.x中保持不变.