在以下示例中(mockito 1.10.19):
MyClass myClass = Mockito.mock(MyClass .class, RETURNS_DEFAULTS);
String s = myClass.getName();
为什么这会导致s == null
而不是空字符串?
它确实在ReturnsEmptyValues中承诺了null
字符串。但是回到""
似乎很明显,我想知道是否有理由不这样做。
编辑:将版本从1.8升级到1.10.19,因为1.8不再提供任何文档。
答案 0 :(得分:11)
从您发布的链接中
每个Mockito模拟的默认答案。
- 返回原始返回方法的适当原语
- 返回原始包装类的一致值(例如int-returns方法返回0和Integer-returning方法返回0, 太)
- 返回集合返回方法的空集合(适用于最常用的集合类型)
- 返回toString()方法
的mock的描述- 为其他所有内容返回null
来自常见问题:
默认情况下模拟会返回什么值?
为了透明和不引人注目所有Mockito嘲笑 默认返回'nice'值。例如:零,假,空 集合或空值。
可能是为了与任何其他非集合非原始Wrapper对象返回null的方法保持一致。
您始终可以实现自己的Answer传递给mock
,它会返回字符串返回方法的空字符串。
答案 1 :(得分:9)
在设计时没有想到,现在出于稳定性原因,这种行为没有改变。
有一个名为ReturnsMoreEmptyValues的非暴露答案,它返回时类型名称表示更多空值。
您还可以查看内部使用ReturnsMoreEmptyValues的Mockito.RETURNS_SMART_NULLS答案,并提供更有趣的调试信息。
请注意此链接指向1.10.19版本的javadoc,但在撰写本文时,此行为在版本2.x中保持不变。
答案 2 :(得分:1)
答案 3 :(得分:0)
根据所有非集合和非简单类型的Mockito代码,它返回null。 String是Object的子类型,它的“空”值为null,而不是“”.IMHO如果您将字符串的空值表示为null或“”,则这是一个设计决策。
答案 4 :(得分:0)
YourService service = mock(YourService.class, RETURNS_MOCKS);
when(service.callYourFunc()).thenReturn(mockValue);
ReflectionTestUtils.setField(serrviceParent, "service", service);
serrviceParent 是您正在测试的服务,它包含字段 YourService ,该字段无法返回您想要的 mockValue 。