从我在Mockito的“问题53”(https://pre.google.com/p/mockito/issues/detail?id=53)上阅读的内容来看,由于Mockito中涉及的验证框架,我的代码遇到了问题。正是以下代码本身导致了异常。
private ConstantNode getConstantNode(NumericalValue value){ ConstantNode node = Mockito.mock(ConstantNode.class); Mockito.when(node.evaluate()).thenReturn(value); Mockito.when(node.toString()).thenReturn(value.toString()); return node;}
如果您还记得我的代码,则参数值也为MOCK,因此当在
value.toString()上调用时
thenReturn(),我相信(如果我错了,请纠正我)验证框架会触发并确保每次“何时”已经
thenReturn()调用/验证/等。因此,如果发生这种情况,
Mockito.when(node.toString()).thenReturn(value.toString()将不会对其进行验证, 因为
不会从中 返回
valute.toString(),从而开始了整个“验证所有内容”链。
我如何解决它:
private ConstantNode getConstantNode(NumericalValue value){ ConstantNode node = Mockito.mock(ConstantNode.class); Mockito.when(node.evaluate()).thenReturn(value); String numberToString = value.toString(); Mockito.when(node.toString()).thenReturn(numberToString); return node;}
这样, 可以 对其进行验证。我发现这是完整的代码味道,因为我将不得不留下一条注释来解释为什么我在代码中使用了看似无用的中间变量。
谢谢您的帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)