
引言:Mockito测试中的困惑与挑战
在编写Java单元测试时,我们经常会利用Mockito等框架来模拟(Mock)依赖对象,以隔离被测单元。然而,开发者有时会遇到verify方法报告“Wanted but not invoked”的错误,甚至在when语句设置桩化行为时就抛出InvocationTargetException。这些问题通常不是Mocking框架本身的缺陷,而是源于对被测对象(System Under Test, SUT)如何获取其依赖、Mock对象与Spy对象行为差异以及测试框架初始化方式的误解。本教程将通过一个具体案例,深入剖析这些常见问题,并提供一套清晰、专业的解决方案和最佳实践。
问题分析:为什么verify会失败且出现异常?
原始测试代码中,ThingTest类旨在测试Thing类的bLogic方法。bLogic方法内部的逻辑是:
- 调用this.fun(size)获取ThingGrandParent实例。
- 通过ThingGrandParent实例调用GpFun(size)获取ThingParent实例。
- 通过ThingParent实例调用fetchSideThing()获取SideThing实例。
- 返回SideThing的weight。
测试代码中声明了@Mock ThingParent tp和@Mock ThingGrandParent tgpp,并尝试对










