ScalaTest 如何分析断言表达式?

How does ScalaTest analyzes assert expressions?

当 ScalaTests 失败时,测试框架会输出如下详细的错误输出:

assert(a == b || c >= d)
// Error message: 1 did not equal 2, and 3 was not greater than or equal to 4

它是如何理解断言表达式的结构的?它是否使用一些 Scala 技巧来覆盖比较运算符,或者它是否可以访问 Scala 编译器的 AST?

assert 的实现是由宏提供的,所以 - 简而言之 - 是的,它可以访问 AST。

如果你对具体细节很好奇,建议看一下源码:https://github.com/scalatest/scalatest/blob/d40d278f2bb8e73431b942d87881fb6dbab75cb9/scalatest/src/main/scala/org/scalatest/AssertionsMacro.scala

https://github.com/scalatest/scalatest/blob/4d785a085717444436fc5a1fa4736e9d2651a300/scalactic-macro/src/main/scala/org/scalactic/BooleanMacro.scala