debug模式下测试数据,显示对象是符合预期的
然后点击对象查看时就会显示对象变了,和之前显示对象完全不一样:
排查了半天,原来是因为:
1,IDEA在debug时,当debug到某个对象时,会调用对象的toString()方法,用来在debug界面显示对象信息。
2,IDEA调用toString()方法时,即使在toString()方法中设置了断点,该断点也不会被触发,也就是说,开发者多数情况下不会知道toString()方法被调用了。
3,多数情况下调用一下toString()方法没有什么问题,但是也有例外,比如重写了toString()方法的类,随意的调用toString()方法会导致未知的问题。
4,比如Dubbo的AbstractConfig类,对这个类的debug会导致其子类ReferenceConfig的initialized属性错误的被修改为true,进而无法正确的生成Dubbo代理(我们这个项目就是用的Dubbo
AbstractConfig类,结果导致idea toString()方法修改了对象,导致测试无法正常运行)
5,IDEA在debug时调用toString()方法的情况是可以在配置中关掉的,配置位置是:
关掉这个配置就行了。
关掉后可以正常运行了:如下图