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