底层原理:
Jmockit底层基于asm和jvm instrument功能实现的在运行期修改字节码,根据MockUp类的类型信息和mock方法签名定位到具体需要修改的类和方法,然后给方法的上面加上转调mock代码逻辑。
调试相关类:
TestRun.getFakeClasses() 该方法返回的fakeClassesToFakeInstances属性里是所有的mock实例,如果运行时发现没有被mock,可以看下这个属性里是否有被mock的类。
如果没有,则检查下写的mock方法签名和原始是否相同。如果有,则检查下mock实例ID和调用地方的mock实例ID是否相同,如果不相同,则可能检查mock的是否是静态实例,如果是静态实例,则可能由于只有在第一个测试方法执行时才会初始化类,在执行后续测试方法时静态属性引用的实例已经被清除了,所以找不到,这种情况需要手动反射调用静态属性重新初始化。