我有一些代码,使用toString()来针对黄金大师测试单元测试输出(期望特定的输出)。同时,当我调试上述单元测试时,toString()的输出有些简洁,我希望在调试器输出中显示更广泛/友好的信息(变量显示,手表等)。这样做是检测到toString()被调用是调试器评估的结果,而不是由于在正常代码路径中运行而导致的。
我尝试在调用toString()时转储堆栈和线程信息。它总是在与调试相同的上下文(调用堆栈和线程)中调用。调用toString()时,没有“特殊”方法被压入堆栈-出现toString(),然后出现“当前”执行方法。
我当前的解决方案是根据需要更改toString()的实现。但是,这很乏味,而且容易出错,如果我在一次完整的单元测试运行之前忘记重置它,我会遇到很多错误。
一种可能的解决方案是使堆栈框架位于toString()调用的正上方,获取其文件和行号,并检查该行上是否有对toString()的直接或隐式调用。我认为检测所有可能创建隐式调用的情况都容易出错,所以我宁愿走这条路。
如果有帮助,我正在IntelliJ IDEA调试器中运行Java代码。
我希望有一些我忽略的API或技术可以为我提供此信息。