我有使用 toString() 来针对黄金大师测试单元测试输出的代码(期望特定输出)。同时,当我调试所述单元测试时, toString() 的输出有点简洁,我希望在调试器输出中显示更广泛/友好的信息(变量显示、 watch 等)。要做的就是检测 toString() 被调用作为调试器评估的结果,而不是作为在正常代码路径中运行的结果。
我尝试在调用 toString() 时转储堆栈和线程信息。它始终在正在调试的同一上下文(调用堆栈和线程)中调用。调用 toString() 时,没有“特殊”方法被压入堆栈 - toString() 出现,然后是“当前”执行方法。
我当前的解决方案是根据需要更改 toString() 的实现。不过,这很乏味,而且很容易出错,因为如果我忘记在完整的单元测试运行之前重置它,我会遇到很多错误。
一个可能的解决方案是获取 toString() 调用上方的堆栈帧,获取其文件和行号,并检查该行上是否存在对 toString() 的直接或隐式调用。我认为检测所有可能创建隐式调用的情况很容易出错,所以我宁愿不走这条路。
如果有帮助,我正在 IntelliJ IDEA 调试器中运行 Java 代码。
我希望有一些我忽略的 API 或技术可以给我这些信息。
最佳答案
请考虑使用Type Renderers IntelliJ IDEA 中的功能并禁用调试器的 toString()
评估。
关于java - 当应用程序停止时,我们是否可以检测到正在调用 toString() 以响应调试器请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023962/